hibernate中的java对象状态

本文详细介绍了ORM中对象的三种状态:临时状态、持久化状态和游离状态,并解释了每种状态下对象的特点及如何在不同状态间转换。

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

1、临时状态

   临时对象的特征:

    不处于session缓存中也就是说不被任务一个session实例关联;

    在数据库中没有对应的记录;

在以下情况下会进入临时状态:

   当通过new 语句刚创建一个对象时,它处于临时状态,此时不和数据库中任何记录对应。

   session的delete()可以使一个持久化对象或游离对象变为临时对象,对于游离对象delete()方法从数据库中删除它对应的记录,对于持久化对象delete()从数据库中删除与它对应的记录并把它从session缓存中清除。

 

2、持久化状态

  持久化对象的特征:

     位于一个session实例的缓存中,也可以说持久化对象总是被一个session实例关联。

     持久化对象和数据库中的相关记录对应。

     session在清理缓存时,会根据持久化对象属性的变化来同步更新数据库。

session的许多方法都能触发java对象进入持久化状态:

     session的save方法可以把临时对象转变为持久化状态

     session的load 方法可以把临时对象转变为持久化状态

     session的find方法返回的list集合中存放的都是持久化对象

     session的update   saveorupdate  lock方法使游离状态对象转变为持久化对象

     当一个持久化对象关联一个临时对象 ,在允许级联保存时session在清理缓存时会把这个临时对象转变为持久化对象。

 

3、游离状态

   游离对象的特征:

     不在位于session的缓存中,也可以说不在被session实例关联

     游离对象是由持久化对象转变过来 的因此在数据库中还存在与它相关的记录(前提是没有其它程序删除这条记录)

session 的以下方法使对象转变为游离状态:

     当调用close方法时session的缓存被清空  缓存中的持久对象转变为游离对象如果程序中没有引用变量引用这些游离对象 这些游离对象将结束生命周期

     session的evict方法可以从缓存中删除一个持久化对象使它变为游离对象,当session缓存中存放了大量持久化对象时会消耗许多内存空间,为了提高性能可以考虑使用evict方法

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值