hibernate笔记--持久化类的三种状态

  • 持久化类的三种状态

hibernate是持久化框架,通过持久化类完成ORM操作。hibernate为了更好的管理持久化类,将持久化类分成三种状态。

持久化类=Java类+映射

  • 瞬时态(transient)

    • 这种对象没有唯一标识符OID,还没有被session管理,这种对象被称之为瞬时态对象。
  • 持久态(persistent)

    • 这种对象有唯一标识符OID,被session管理,这种对象称之为持久态。
      • 持久化类的持久化对象,可以自动更新数据库。
  • 托管态(detached)

    • 这种对象有唯一标识符OID,没有被session管理,称之为托管态。
  • 区分三种状态对象

public class HibernateDemo2 {
	// 三种状态转换
	@Test
	public void demo1() {
		Session session = HibernateUtils.openSession();
		Transaction transaction = session.beginTransaction();
		Customer customer = new Customer();// 瞬时态对象:没有唯一标识符OID,没有被session管理。
		customer.setCust_name("张三");
		Serializable id = session.save(customer); // 持久态对象:有唯一标识符,被session管理。
		transaction.commit();
		session.close();
		System.out.println("顾客姓名:" + customer.getCust_name());// 托管态对象:有唯一标识符,没有被session管理。
	}
}
  • 持久化的状态转换

    三种状态转换图
    • 瞬时态对象

      • 获取途径
        • Customer customer = new Customer();
      • 状态转换
        • 瞬时-->持久
          • save(Object obj)
          • saveOrUpdate(Object obj)
        • 瞬时-->托管
          • customer.setCust_id(1l);//托管有唯一标识符OID
    • 持久态对象

      • 获取途径
        • get()
          • Customer customer = session.get(Customer.class,1l);
        • load()
          • Customer customer = session.load(Customer.class,1l);
        • find()
        • iterate()
      • 状态转换
        • 持久-->瞬时
          • delete()
        • 持久-->托管
          • close()
          • clear()  : 清空所有
          • evict(Customer customer)  : 清空某一个对象
    • 托管态对象

      • 获取途径
        • Customer customer = new Customer();
        • customer.setCust_id(1l);
      • 状态转换
        • 托管-->持久
          • update();
          • saveOrUpdate();
          • lock();
        • 托管-->瞬时
          • customer.setCust_id(null);
@Test
// 保存或更新
public void demo2(){
	Session session = HibernateUtils.openSession();
	Transaction tx = session.beginTransaction();
		
	/*Customer customer  = new Customer();   //瞬时态
	customer.setCust_name("James");
	session.saveOrUpdate(customer);*/        //持久态(执行save转化为持久态)
		
	Customer customer = new Customer();      //瞬时态
	customer.setCust_id(3l);                 //托管态(设置唯一标识符OID,但是没有被session管理)
	customer.setCust_name("Lebron");
	session.saveOrUpdate(customer);          //持久态(执行update转化为持久态)
		
	tx.commit();
	session.close();
}
  • 持久态对象特性

    • 持久态对象可以自动更新数据库

      // 持久态对象可以自动更新数据库
      @Test
      public void demo2() {
      	Session session = HibernateUtils.openSession();
      	Transaction transaction = session.beginTransaction();
      
      	// 获得持久态对象
      	Customer customer = session.get(Customer.class, 1l);
      	customer.setCust_name("king");
      	// session.update(customer); //注释这条语句依然可以更新数据库(依赖hibernate的一级缓                    存)
      
      	transaction.commit();
      	session.close();
      }

       

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值