Hibernate的三种状态转换

hibernate三种状态:

临时状态(transient):新new出来的pojo对象,还未获得在数据库中的唯一标识符

持久化状态(persistent):与数据库产生了联系,拥有了唯一标识符,拥有了唯一的标识符,存在于session缓存中

游离状态(detached):数据库中有,但是session中不存在该对象

hibernate状态转换

强调一点,对象被持久化并不是说被存储进了数据库,而是通过save(object)方法,加入到了session缓存中,获得了对应表的唯一主键标志
比如:
User user = session.get(User.class,1);
user本身就已经存在于数据库中,通过get/load/list/iterator/find…等方法被从数据库中取出,加载到了session缓存中,同样也是出于持久化状态了。
游离状态,有这几种情况:
1.对象本身就是数据库中的一员,在被加载到session缓存中以后,因为session的关闭,与数据库的同步也被关闭,而处于了游离状态。
2.在session的事务中被迫的进入了游离状态。evict,clear方法,切断了与数据库的链接。

游离状态可以通过update/saveOrUpdate更新进入到缓存,或者lock(貌似已经过时)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值