mySong的gravatar头像
mySong 2017-11-07 11:01:23

hibernate中的持久化对象三个状态的处理方法

目前项目中出现一个问题就是:session.get(class,id) 返回的对象实体,后面我们对这个实体对象重新赋值处理了的,但是后面我们没有调用save(),saveorupdate(),update()等更新方法,最后数据库还是做了保存操作,

最后查询便知是因为get出来的是持久态的数据,重新set值后 在事务完成后会自动保存到数据库里,解决方法是变持久态为游离态,方法为 session.flush()或session.close()或session.evict()等方法转变;

但是现在这样存在另外一个问题,如果这个实体对象有级联对象存在 而且在起上面配置的懒加载,那么在后面对这个对象进行get这个级联属性的时候就报错咯;

你们有遇到这个情况,怎么解决的呢?

所有回答列表(1)
hungrypan的gravatar头像
hungrypan  LV2 2017年11月8日

在非只读事务环境下,对持久化状态的对象进行的更改会在事务提交后保存到数据库,所以只需要将该事务设置为只读就可以了。如果实在要在事务环境下改变该对象又不想更新到数据库,可以拷贝一个该对象的副本再进行操作。

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友