问题描述
HIBERNATE的事务是用SPRING管理,一般是根据异常来回滚数据。我遇到一个怪问题,我取出一条记录,设置一个属性,没有做保存操作,数据就存进去了。比如在一个struts2 action 里面 public String execute(){ User user=userDao.get(id); user.setName("test");//userDao.save(user);//为何没有这句代码,也能保存数据? return SUCCESS;}public String execute(){ User user=userDao.get(id); user.setName("test"); throw new RuntimeException("test");//这样可以回滚。有没有什么办法可以手动回滚数据?而不是一定要抛出异常才能回滚 return SUCCESS;}注意:HIBERNATE的事务是用SPRING管理。 问题补充:mikehuhu 写道
解决方案
User user=userDao.get(id); 后user是持久态的,session定时flush后,对user的更新会被更新到数据库中;可以通过Session.evict(user)将user从session缓存中移除,此后对user的修改将不会同步到数据库中。
解决方案二:
用sessionTransaction tx = session.beginTransaction();...貌似需要close session。
时间: 2024-12-25 10:37:32