hibernate不执行update,不抛错

NestleCaau 发布于 2014/06/06 16:05
阅读 1K+
收藏 0
Shipment shipment = shipmentDao.getByDate(id, shipmentDate);
            OrderDetail od = baseDao.getById(OrderDetail.class, id);
            if (order == null) {
                order = od.getOrder();
            }
            if (shipment == null) {
                shipment = new Shipment();
                shipment.setOrderDetail(od);
                shipment.setTotal(total);
                shipment.setQuantity(quantity);
                shipment.setShipmentDate(shipmentDate);
                shipment.setType(type);
                baseDao.saveByObject(shipment);//这里执行保存成功
            } else {
                //因为Shipment是ManytoOne OrderDetail 并且是OrderDetail,这里获得的OrderDetail是lazy的od,这会造成下面的baseDao.updateByObject(od);不执行
                //如何解决
                shipment.setTotal(total);
                shipment.setQuantity(quantity);
                shipment.setType(type);
                baseDao.updateByObject(shipment);//这里不执行更新,也不打印update sql
            }
            od.setShipment(total);

            baseDao.updateByObject(od);

求大神帮忙

1.为何能保存到shipment,却不能update shipment,也不报错

2.如何解决获取的OrderDetail是lazy,我想从DB里获取,不是从缓存

另外一个方法

Shipment shipment = baseDao.getById(Shipment.class, id);
        baseDao.deleteByObject(shipment);
        OrderDetail od = shipment.getOrderDetail();
        od.setShipment(od.getShipment() - shipment.getTotal());
        baseDao.updateByObject(od);
        Order order = od.getOrder();
        order.setShipment(order.getShipment() - shipment.getTotal());
        baseDao.updateByObject(order);
        ProductionProcess process = productionProcessDao.getByOrderDetailAndDate(od.getId(), shipment.getShipmentDate());
        process.setShipment(0);
这里第2行也出现不能删除shipment

以下是问题补充:

@NestleCaau:如果是事务的问题,为什么能save却不能update和delete.如果是事务不提交,为什么不提交,为什么又没有显示出错,如果有出错,我应该在哪捕获? (2014/06/06 16:50)
加载中
0
Jack_Q
Jack_Q
 baseDao.getById  应该是没和spring事务aop挂钩。可能要修改为 baseDao.updateXXX
0
ZICK_ZEON
ZICK_ZEON
八成是事务的问题
0
一身正气
一身正气
事务没有提交,
0
你的微笑
你的微笑

Hibernate 会优化执行的SQL,执行的SQL顺序Hibernate优化过后并不能保证一致。

baseDao.update 之前先执行 baseDao.get();  会触发update事件

返回顶部
顶部