@Override
 public void saveRecord(SaleRecord record) {
   // 遍历判断书的库存是否不够
   for (BookSaleRecord r : record.getBookSaleRecords()) {
     String bookId = r.getBook().getID();
     Book b = bookDao.find(bookId);
     // 当存库不够时,抛出异常
     if (Integer.valueOf(r.getTRADE_SUM()) > Integer.valueOf(b.getREPERTORY_SIZE())) {
       throw new BusinessException(b.getBOOK_NAME() + " 的库存不够");
     }
   }
   // 先保存交易记录
   String id = saleRecordDao.save(record);
   // 再保存书的交易记录
   for (BookSaleRecord r : record.getBookSaleRecords()) {
     // 设置销售记录id
     r.setT_SALE_RECORD_ID_FK(id);
     bookSaleRecordDao.saveBookSaleRecord(r);
     // 修改书的库存
     String bookId = r.getBook().getID();
     Book b = bookDao.find(bookId);
     // 计算剩余的库存
     int leave = Integer.valueOf(b.getREPERTORY_SIZE()) - Integer.valueOf(r.getTRADE_SUM());
     // 设置库存并将库存数保存到数据库
     b.setREPERTORY_SIZE(String.valueOf(leave));
     bookDao.updateRepertory(b);
   }
 }
 // 处理一个SaleRecord, 设置它的书本销售记录属性和书本名字属性
 private SaleRecord processDatas(SaleRecord r) {
   // 查找该记录所对应的书的销售记录
   Collection<BookSaleRecord> brs = bookSaleRecordDao.findBySaleRecord(r.getID());
   // 设置结果集中的每一个book属性
   setBook(brs);
   // 设置SaleRecord对象中的书的销售记录集合
   r.setBookSaleRecords((Vector<BookSaleRecord>) brs);
   // 设置SaleRecord的书名集合
   r.setBookNames(getBookNames(brs));
   // 设置数量与总价
   r.setAmount(getAmount(brs));
   r.setTotalPrice(getTotalPrice(brs));
   return r;
 }