在Hiberate事务中,如果出现抛异常或者其它原因导致没有执行commit或rollback方法时,很可能会造成数据库中数据不一致现象的产生,代码如下:
Transaction tx = session.beginTransaction() ;
//user这个时候是持久态(Persisent),所以对password的操作将影响数据库的记录
user.setPassword("eeeeeeeeee") ;
//清空了user对象
user = null ;
//然后又调用user对象中的方法
System.out.println(user.getPassword());
//这样就会抛出异常,事务就不提交也不回滚了
tx.commit() ;
大家对这个问题怎样看,是否有安全隐患,应该怎样解决 .
补充:我的user到这里已经调用Session.save()了,我这样写的目的是模拟在提交或回滚之前,可能有些代码会发生异常,导致不能提交或回滚,并不是真正的业务代码,请大家不要关注于业务逻辑是否合理.
Transaction tx = session.beginTransaction() ;
//user这个时候是持久态(Persisent),所以对password的操作将影响数据库的记录
user.setPassword("eeeeeeeeee") ;
//清空了user对象
user = null ;
//然后又调用user对象中的方法
System.out.println(user.getPassword());
//这样就会抛出异常,事务就不提交也不回滚了
tx.commit() ;
大家对这个问题怎样看,是否有安全隐患,应该怎样解决 .
补充:我的user到这里已经调用Session.save()了,我这样写的目的是模拟在提交或回滚之前,可能有些代码会发生异常,导致不能提交或回滚,并不是真正的业务代码,请大家不要关注于业务逻辑是否合理.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货