一、三种状态简介
1、瞬时态:transient,session没有缓存对象,数据库也没有对应记录。
直白说就说:没有与Hibernate产生关联也没有与数据库里的记录产生关联(有关联就是与数据库中的ID有对应)
2、持久态:persistent,session缓存对象,数据库有记录。
3、托管态(游离态):detached,session没有缓存对象,数据库有记录。
二、三种状态之间的相互转换
1、瞬时态/临时态
获得:一般都只直接创建(new)
瞬时态转换为持久态:save方法、saveOrUpdate
瞬时态转换为游离态:通过setId方法设置数据
例如: User user = new User(); //瞬时态
user.setUid(1); //游离态
2、持久态
获得:查询操作:get、load、createQuery、createCriteria等
执行save之后是持久态
执行update之后是持久态
持久态转换为瞬时态:delete()
持久态转换为游离态:session没有记录
session.close() 关闭
session.clear() 清除所有
session.evict(obj) 清除指定的PO对象
3、托管态/游离态
获得:创建并设置OID,通过api获得
游离态转换为瞬时态:手动去除OID,设置成默认值
游离态转换为持久态:update()、saveOrUpdate()
三、三种状态有什么用?
我们使用Hibernate主要是为了持久化我们的数据。对于对象的状态,我们期望我们需要同步到数据库中的数据都被转换为持久状态。持久化状态的特点:Hibernate会自动将持久化状态对象的变化同步到数据库中。