Hibernate自动更新的坑

问题描述:

昨天有个同学遇到一个问题,跑来问我,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

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 今天晚上专心致志的辅导李金阳作业。在做功课的过程中,逐步发现她暴露出的问题。并逐一一引导。看得出来,孩子很高兴。还...
    TA76广新阅读 214评论 0赞 2
  • 今早,一天的开始。忙忙碌碌地洗脸,刷牙,晒衣服,还有弄早点。带着好心情,去上班。穿着新潮的衣服,带上领巾,穿着托马...
    王玉笙阅读 257评论 0赞 0
  • 一个真正懂得酒的人都知道,酒不过只是一种媒介,一种方式,甚至是一种心情,把酒临风,酒乘四溢,喝到嘴里的是酒,流淌的...
    仰韶彩陶坊张丽阅读 369评论 0赞 3
  • 怎样选择,就会有怎样的生活。 爱默生的原话是说怎样思想,就有怎样的生活。其实想过了之后所做的选择,对以后的生活...
    日长无事蝴蝶飞阅读 504评论 2赞 2
  • 刚听到了今年的第一声春雷,雅轩说她要去关窗户了,我也把阳台的窗户关上,回来跟她说我要赶紧休息了,最近睡眠不足需要多...
    伟伟淘阅读 850评论 4赞 1

友情链接更多精彩内容