美文网首页
Hibernate自动更新的坑

Hibernate自动更新的坑

作者: 浅笑丨无痕 | 来源:发表于2018-04-10 09:21 被阅读0次

    问题描述:

    昨天有个同学遇到一个问题,跑来问我,hibernate查询出来的对象集合,根据业务需要遍历赋值,结果赋值的对象都会更新到数据库...好吧,这明显是有问题的.

    问题追踪:

    1.查看日志后发现,系统总是会打印出一个update语句。说明系统的确是执行了更新操作的,但是我并没有调用任何和update相关的方法。

    2.通过hibernate中hql查询出的实体都是持久化对象,拿到该对象后,如果你调用了该对象的set方法,那么在事务递交的时候,Hibernate会把你设置的值自动更新到数据库中。

    问题处理:

    1.通过getCurrentSession().clear();强制清除Session缓存,但是他的业务中又需要懒加载去获取关联的实体,这样导致调用的clear无效。

    2.所以采用了getCurrentSession().evict(entity),懒加载获取的实体后,通过调用evict(entity)的方法,把缓存持久化对象变成托管状态。变成托管状态后,Hibernate就不会再去自动更新该实体。

    拓展:

    Hibernate的实体状态:

    https://blog.csdn.net/sunhuwh/article/details/9183539

    相关文章

      网友评论

          本文标题:Hibernate自动更新的坑

          本文链接:https://www.haomeiwen.com/subject/pflghftx.html