Hibernate持久化对象的状态

持久化对象的状态

Hibernate的持久化类

  • 持久化类:Java类与数据库的某个表建立了映射关系,这个类就称为是持久化类
  • 持久化类 = Java类 + hbm的配置文件

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();
        }
}

在这里插入图片描述