hibernate持久化的三种状态

1、持久化对象
hibernate持久化对象分为3中状态:瞬时状态、持久状态、脱管状态

transient(瞬时态):尚未与Session关联对象,失去引用的话,就会被JVM回收。一般就是直接New创建的对象。

persistent(持久态):已经与当前session产生关联,并且相关联的session没有关闭,并且事务尚未提交。

detached(托管态):存在持久化OID,但没有与当前session关联,脱管状态改变hibernate不能检测到。

// 获得Session  
Session session = HibernateUtils.openSession();  
// 开启事务  
Transaction transaction = session.beginTransaction();  
  
Book book = new Book(); // 瞬时态(没有OID,未与Session关联)  
book.setName("hibernate精通");  
book.setPrice(56d);  
  
session.save(book);// 持久态(具有OID,与Session关联)  
  
// 提交事务,关闭Session  
transaction.commit();  
session.close();  
  
System.out.println(book.getId()); // 托管态(具有 OID,与Session断开关联)  

当对象的临时状态将变为持久化状态。当对象在持久化状态时,它一直位于 Session 的缓存中,对它的任何操作在事务提交时都将同步到数据库,因此,对一个已经持久的对象调用 save() 或 update() 方法是没有意义的。

Student stu = new Strudnet();
stu.setCarId(“200234567”); 
stu.setId(“100”);

// 打开 Session, 开启事务
Session session = HibernateUtils.openSession();  
Transaction transaction = session.beginTransaction();  

//将stu对象持久化操作
session.save(stu);
stu.setCardId(“20076548”);

//再次对stu对象进行持久化操作
session.save(stu); // 无效
session.update(stu); // 无效
// 提交事务,关闭 Session
transaction.commit();  
session.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值