持久化对象的状态
Hibernate的持久化类
- 持久化类:Java类与数据库的某个表建立了映射关系,这个类就称为是持久化类
Hibernate的持久化类的状态
- Hibernate 为了管理持久化类:将持久化类分成了三个状态
- 瞬时态:Transient Object
- 没有持久化标识OID,没有被纳入到Session对象的管理
- 持久态:Persistent Object
- 有持久化标识OID,已经被纳入到Session对象的管理
- 注意:持久化持久态的对象有自动更新数据库的能力
- 托管态:Datached Object
- 有持久化标识OID,没有被纳入到Session对象的管理

Hibernate持久化对象的状态的转换
瞬时态----没有持久化标识OID,没有被纳入到Session对象的管理
- User user = new User()
- 瞬时态对象转换持久态
- save()/saveOrUpdate();
- 瞬时态对象转换成托管态
- user.setId(1)
持久态----有持久化标识OID,已经被纳入到Session对象的管理
- get()/load()
- 持久态转换成瞬时态对象
- delete()----比较有争议的,进入特殊的状态(删除态:Hibernate中不建议使用的)
- 持久态对象转成托管态对象
- session的close()/evict()/clear()
托管态----有持久化标识OID,没有被纳入到Session对象的管理
- User user = new User()
- user.setId(1)
- 托管态对象转换成持久态对象
- update();/saveOrUpdate()/lock()
- 托管态对象转换成瞬时态对象
- user.setId(null);
- 注意:持久化对象有自动更新数据库的能力
public class Demo2 {
//由session的一级缓存实现
//持久态的对象有自动更新数据库的能力
@Test
public void run1(){
Session session = HibernateUtils.getsSession();
Transaction tr = session.beginTransaction();
//获取到持久态的对象
User user = session.get(User.class,1);
//user 是持久态,有自动更新数据库的能力
System.out.println(user.getName());
//重新设置新的名称
user.setName("消融");
//正常情况下,需要
//session.update(user);
tr.commit();
session.close();
}
}
