Hibernate获取数据库实体状态

在Hibernate实际应用中,对象状态的管理至关重要。对象存在游离态、自由态(临时状态)和持久态。通过Session获取的对象,设置属性后会直接影响数据库。临时状态的对象未被持久化或加入Session,游离态则是已持久化但不在Session中。针对不同状态,解决办法包括:1.若对象不再使用,可新建实例避免影响;2.若需要保留对象,推荐使用evict方法将其转为游离态,避免不必要的数据库更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实际开发中使用hibernate获取到对象,在对数据做处理(将枚举类里的内容对应放进去)后重新set进对象,但发现数据里面的数据竟然被更新。才了解到hibernate获取对象分以下状态。

Hibernate分为三种基本的状态:游离态、自由态(临时状态)、持久态。

 

Session获得对象之后对对象进行set属性操作之后,此对象会update对应数据库当中的值。

其他两种状态:

    1. 临时状态:就是直接new出来的对象,既没有持久化到数据库中去,也没有在session当中。

    2. 游离状态:在Session中没有了,但是已经持久化到了数据库当中。

 

-----对于这两种状态的解决方式:

   1.如果这个对象(例子中的company)本身不需要用的话,可以直接new一个Company的对象出来然后再setUsers这个时候因为不是Session中的数据,那么不会因为对象的属性发生改变而同步到数据库中去。

    2.如果这个对象(例子中的company)要用的到,那么,在set之前可以先将其转为游离态,这样的话会用到session的几个方法:close、clear、evict。

   close方法:关闭session这样这个对象肯定是游离态了,因为session已经关闭了,但是往往我们实际的开发过程中,session在后面是要用的到的,所以这个方法可行,但是不一定用得上,分清具体的情况。

   clear方法:将session中的所有的对象全部清除出缓存,这个方式有点劳师动众,不过session清除了全部的对象之后自然就会变为游离态了,这样做不是很好吧我感觉。

   evict方法:将某一个对象清除出缓存session,这个方法是很好的实现方式,推荐使用。调用的时候是这样的,session.evict(Objectobj);这样就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值