hibernate查询出的实体,set值后,自动更新到数据

 

如图:html

故事背景:(p.s.咱们的项目没有正确配置事务xml文件,未明缘由致使事务定义的规则不起做用)获取一个资讯对象,调用该对象的set方法设置其中的content字段,而后把修改后的实体丢到官网首页进行展现。结果部署到生产后发现,在进入首页获取资讯列表时,在调用到如图的方法时,会直接将临时set的content持久化到到数据库中了。好吧,这明显是有问题的....那么,是什么缘由呢?数据库

 

答:.net

a.查看日志信息后发现,系统老是会打印出一个update语句。说明系统的确是执行了更新操做的,可是我并无调用任何和update相关的方法。
b.跟踪代码发现,queryByCondition方法实际上是调用了hibernate的get方法。嗯,果真,问题出在这里了.....
c.Hibernate的get和load方法查询出的实体都是持久化对象,拿到该对象后,若是你调用了该对象的set方法,那么在事务递交的时候,Hibernate会把你设置的值自动更新到数据库中。hibernate

 

如何解决:日志

方案1:在获取实体对象后,调用下getHibernateTemplate().evict(entity)方法,该方法的做用是把持久化对象变成托管状态。变成托管状态后,Hibernate就不会再去自动更新该实体。xml

方案2:正确配置事务。参考:https://blog.csdn.net/qq_19167629/article/details/80426625htm

 

参考:https://www.cnblogs.com/xiao-lei/p/10005625.html对象

相关文章
相关标签/搜索