hibetnate 缓存问题,换成JDBC

@Transactional

public synchronized int addPiaojuOrder(WlcOrder wlcOrder, WlcPiaoju wlcPiaoju, 

Double buyMoney) {

try {

//支付成功和下单未支付的总额

Double amount = wlcPiaojuService.getAllOrderAmountByPJId(wlcPiaoju.getId());

BigDecimal b1 = new BigDecimal(Double.toString(buyMoney));

b1 = b1.setScale(2, BigDecimal.ROUND_HALF_UP); 

BigDecimal b2 = new BigDecimal(Double.toString(wlcPiaoju.getTotal()));

b2 = b2.setScale(2, BigDecimal.ROUND_HALF_UP); 

BigDecimal b3 = new BigDecimal(Double.toString(amount));

b3 = b3.setScale(2, BigDecimal.ROUND_HALF_UP); 

//购买时间已超过放款时间

if (wlcPiaoju.getLoansTime().getTime() - new Date().getTime() < 0) {

return 3;

}

//票据状态不在发售中

if (!"2".equals(wlcPiaoju.getProductStatus())) {

return 1;

}

//购买金额大于剩余金额 buyMoney > (wlcPiaoju.getTotal()-amount)

if (b1.compareTo(b2.subtract(b3)) > 0) {

return 2;

}

//订单满额锁定状态buyMoney == (wlcPiaoju.getTotal()-amount)

if (b1.compareTo(b2.subtract(b3)) == 0) {

wlcPiaoju.setProductStatus("6");

wlcPiaojuService.saveOrUpdate(wlcPiaoju);

}

wlcPiaojuService.saveOrder(wlcOrder);

//this.saveOrUpdate(wlcOrder);

 

return -1;

 

} catch (Exception e) {

e.printStackTrace();

logger.info("WlcOrderServiceImpl-------------------------addPiaojuOrder()出现异常======================" + e.getMessage());

return 2;

}

}

 

     在以上的红色代码中,两个方法开始分别使用了hibernate机制,来查询订单总额和保存新的订单。

查询订单总额主要用于用于比较新的订单是否超过可买余额。但是在使用hibernate时间,由于取得的数据都是从缓存里面获取的,所以,出现了“冒顶”的情况。

     开始以为bug的产生是由于同步没成功,最后经过几天的奋战,用JDBC来操作这两个方法。获得了成功。

你可能感兴趣的:(jdbc)