Hibernate入门(四)之持久化对象的三种状态
来源:互联网 发布:淘宝特种经营许可申请 编辑:程序博客网 时间:2024/06/05 16:56
持久化对象的三种状态概述
Hibernate为了更好的管理持久化类,将持久化类分成了三种状态。
瞬时态(transient)
瞬时态也被称为临时态或自由态,瞬时态的实例是由new命令创建、开辟内存空间的对象,不存在持久化表示OID(相当于主键值),尚未与Hibernate Session关联,在数据库中也没有记录,失去引用后将被JVM回收。瞬时态在内存中是孤立存在的,与数据库中的数据无任何关联,仅是一个信息携带的载体。持久态(persistent)
持久态对象存在持久化标识OID,加入到了Session缓存中,并且相关联的Session没有关闭,在数据库中有对应的记录,每条记录只对应唯一的持久化对象,需要注意的是,持久态对象是在事物还未提交前编程持久态的。- 脱管态(detached)
脱管态也称离线态或游离态,当某个持久化状态的实例与Session的关联被关闭时就编程了脱管态。脱管态对象存在持久化表示OID,并且仍然与数据库中的数据存在关联,只是失去了与当前Session的关联,托管状态对象发生改变时Hibernate不能检测到。
代码演示三种状态:
public static void main(String[] args) { //1.读取配置 Configuration config = new Configuration().configure(); //2.构建Session工厂类 SessionFactory sessionFactory = config.buildSessionFactory(); //3.获取session对象 Session session = sessionFactory.openSession(); //4.开启事务 Transaction transaction = session.beginTransaction(); //5.创建持久化类对象 Customer customer = new Customer(); //此时处于瞬时态 未与session关联,没有OID customer.setCust_name("GaoQiAn"); Serializable id = session.save(customer); //此时处于持久态 加入到Session缓存且关联的Session未关闭,有OID //7.提交事务 transaction.commit(); //8.释放资源 session.close(); System.out.println(customer); //此时位于脱管态 存在持久化表示OID,只是失去了与当前Session的关联 }
Hibernate持久化对象的三种状态转换
持久化对象的三种状态可以通过调用Session中的一系列方法实现状态间的转换,具体如下:
- 瞬时态对象换到其他状态
- 瞬时态转换为持久态:执行Session的save()或saveOrUpdate()方法。
- 瞬时态转换为脱管态:为瞬时态对象设置持久化标识OID。
- 持久态对象转换到其他状态。持久化对象可以直接通过Hibernate中的Session的get()、load()方法,或者Query查询从数据库中获得,持久态对象转换到其他状态总结如下:
- 持久态转换到瞬时态:执行Session的delete()方法,需要注意的是被删除的持久化对象,不建议再次使用。
- 持久态转换到脱管态:执行Session的evict()、close()或Clear()方法。evict方法用于清除一级缓存中某一个对象;close方法用于关闭Session,清除一级缓存;clear方法用于清除一级缓存的所有对象。
- 脱管态对象转换到其他状态。脱管态对象无法直接获得,是由其他状态转换而来的。
- 脱管态转换为瞬时态:将脱管对象的持久化标识OID设为null。
- 脱管态转换为持久态:执行Session的update()、saveOrUpdate()或lock()方法。
阅读全文
0 0
- Hibernate入门(四)之持久化对象的三种状态
- Hibernate之持久化对象的三种状态
- 【hibernate进阶】hibernate持久化对象的三种状态
- Hibernate持久化对象的生命周期(三种状态:临时、持久、游离 )
- Hibernate持久化对象的生命周期(三种状态:临时、持久、游离 )
- hibernate的持久化对象的三种状态
- Hibernate持久化对象的三种状态
- Hibernate持久化对象的三种状态
- Hibernate持久化对象的三种状态
- Hibernate持久化对象的三种状态
- Hibernate持久化对象的三种状态 .
- Hibernate持久化对象的三种状态
- Hibernate持久化对象的三种状态
- Hibernate持久化对象的三种状态
- hibernate持久化对象的三种状态
- Hibernate持久化对象的三种状态
- Hibernate持久化对象的三种状态
- 【SSH框架】--Hibernate持久化对象的三种状态
- mysql5.7初始化后连接mysql的时候报:Your password has expired.
- pat乙级真题 1068. 万绿丛中一点红(20)
- [Vue]不能使用索引直接修改数组,但可以使用索引更新对象数组内的属性
- [JS] 改自网络:单行任意数量条公告循环滚动代码
- 复习系列--javascript数组的常用方法总结
- Hibernate入门(四)之持久化对象的三种状态
- Slim中的集合类Collection
- 使用原生js读取树形结构对象构筑多级结构菜单
- hibernate详细脑图
- 全面提高你的搜索技巧
- Python语言入门(八)动态语言中的类与对象初探
- IT界的后门事件
- 入门python3爬虫需要掌握的知识与技巧
- 精通脚本黑客3.1-3.8笔记