`

hibernate对象的三种状态及之间的转换 .

 
阅读更多
Hibernate的对象有3种状态,分别为:瞬时态(Transient)、持久态(Persistent)、脱管态(Detached)。处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object)。
瞬时态
        由new命令开辟内存空间的java对象,
       eg. Person person = new Person("xxx", "xx");
        如果没有变量对该对象进行引用,它将被java虚拟机回收。
         瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在Hibernate中,可通过session的save()或saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变成持久化对象。


持久态
        处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化标识。如果是用hibernate的delete()方法,对应的持久对象就变成瞬时对象,因数据库中的对应数据已被删除,该对象不再与数据库的记录关联。
       当一个session执行close()或clear()、evict()之后,持久对象变成脱管对象,此时持久对象会变成脱管对象,此时该对象虽然具有数据库识别值,但它已不在HIbernate持久层的管理之下。
       持久对象具有如下特点:
        1. 和session实例关联;
       2. 在数据库中有与之关联的记录。


detached :脱管状态或者游离态
    (1) 当通过get 或load方法得到的po对象它们都处于persistent,但如果执行delete(po)时(但不能执行事务),该po状态就处于 detached, (表示和session脱离关联),因delete而变成游离态可以通过save或saveOrUpdate()变成持久态
(2)当把session关闭时,session缓存中的persistent的po对象也变成detached
因关闭session而变成游离态的可以通过lock、save、update变成持久态
持久态 实例可以通过调用 delete()变成脱管状态 。
通过get()或load()方法得到的实例都是持久化状态的。
脱管状态的实例可以通过调用lock()或者replicate()进行持久化。

       脱管对象具有如下特点:
       1. 本质上与瞬时对象相同,在没有任何变量引用它时,JVM会在适当的时候将它回收;
        2.   比瞬时对象多了一个数据库记录标识值。


游离态的特征:游离态的实体对象一定是由持久化实体对象转变来的。游离态的实体对象不再与Session相关联。游离态的实体对象与数据库中的数据没有直接联系。主要表现在对其的修改将不再影响数据库中的数据。游离态实体对象在数据库中有相应的数据记录(如果该记录没有被删除)

代码举例:

//创建一个瞬态对象

User user = new User();
user.setName("username");
user.setPassword("test");
//user仍然是一个瞬态对象

Session Session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
//此时user仍然是瞬态对象
session.save(user);
//此时,user对象已经被纳入到Hibernate的实体管理容器中,并转变为Persistent状态

tx.commit();
//事务被提交后,向数据库的用户中插入一条记录
session.close();
//此时user对象变为了Detached状态。

分享到:
评论

相关推荐

    hibernate对象三种状态

    在Java的持久化框架Hibernate中,对象存在三种不同的状态,分别是持久态(Persistent)、自由态(Transient)和游离态(Detached)。这三种状态分别对应了对象与数据库的关联程度,理解它们对于高效地使用Hibernate...

    Hibernate中对象的三种状态

    在Java的持久化框架Hibernate中,对象的状态管理是其核心特性之一...总之,理解Hibernate中对象的三种状态以及它们之间的转换对于开发人员来说至关重要。熟练掌握这些概念有助于编写出更加高效、可靠的Java持久化代码。

    Hibernate中的实体状态及转换

    在Java的ORM框架Hibernate中,实体管理是其...理解并熟练运用Hibernate的实体状态转换,对于优化数据操作和提高代码效率至关重要。在实际开发中,开发者应根据业务需求选择合适的转换方式,确保数据的正确性和一致性。

    Java面试题57.hibernate对象状态及其转换.mp4

    Java面试题57.hibernate对象状态及其转换.mp4

    Hibernate Session 4种对象状态.docx

    理解Hibernate的对象状态对于有效地进行数据库操作至关重要。正确管理对象状态可以避免数据丢失、重复插入或其他数据库一致性问题。在开发过程中,应该注意何时创建、保存、更新和删除对象,以及它们与Session的关系...

    Hibernate三种状态

    在Java开发中,Hibernate是一个非常流行的持久...掌握Hibernate对象的这三种状态及其转换规则,对于编写高效、稳定的Java应用程序至关重要,因为它可以帮助开发者更好地管理对象的生命周期,确保数据的一致性和完整性。

    Hibernate三种状态区分

    在 Hibernate 中,对象有三种不同的状态,这些状态决定了对象与数据库之间的关联程度以及如何进行数据操作。理解这些状态对于有效地使用 Hibernate 至关重要。 1. **瞬时态(Transient)**: - 瞬时态的对象是刚刚...

    Hibernate对象状态以及各种保存方法的区别

    Hibernate 是一个流行的 Java 开发框架,用于简化数据库...理解 Hibernate 对象状态及其转换对于有效管理和优化数据库操作至关重要。正确使用这些状态和保存方法能够避免数据冗余和丢失,提高应用的性能和数据一致性。

    Hibernate对象持久化状态

    在 Hibernate 框架中,Java 对象的状态管理和 Session 缓存是核心概念,它们直接影响着数据的持久化过程和数据库...同时,根据具体应用需求,选择合适的缓存清理策略和对象状态转换时机,以达到最佳的数据库操作效果。

    Hibernate 三种状态

    ### Hibernate 三种状态详解 #### 一、引言 Hibernate 是一款开源的对象关系映射 (ORM) 框架,它极大地简化了 Java 应用程序与数据库之间的交互过程。在 Hibernate 中,对象的状态管理是其核心特性之一,主要包括...

    57.hibernate对象状态及其转换.avi

    java工程师

    05_传智播客hibernate教程_实体对象的三种状态与saveOrUpdate方法

    - 如果对象是瞬时状态,`saveOrUpdate`会调用`save()`,为对象生成一个新的数据库ID并将其状态转换为持久化。 - 如果对象是持久化状态或游离状态,`saveOrUpdate`会调用`update()`,将对象的最新状态同步到数据库。 ...

    hibernate 三种状态的转换

    理解并掌握Hibernate的这三种状态转换对于开发者来说非常重要,因为它直接影响到对象的生命周期管理以及如何有效地更新数据库中的数据。在实际开发中,正确处理这些状态转换可以避免数据一致性问题,提高代码的可...

    hibernate源码release-4.1.4.Final版

    其中,save()适合新对象的插入,update()用于已存在对象的更新,merge()则是合并当前对象状态到持久化对象,delete()则删除对象。 七、事件监听 Hibernate允许用户自定义监听器,如PreInsertEventListener、...

    Java 精通Hibernate对象持久化技术权威指南

    《Java精通Hibernate对象持久化技术权威指南》是一本深度探讨Java开发中如何高效地使用Hibernate进行对象持久化的专业书籍。本书旨在帮助Java开发者熟练掌握Hibernate框架,实现数据库操作的简化和自动化,提升软件...

    08.拓薪教育-hibernate4.3的hibernate.cfg.xml基本配置.part2

    高级Hibernate4开发技术:ORM思想,hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,...

    08.拓薪教育-hibernate4.3的hibernate.cfg.xml基本配置.part1

    高级Hibernate4开发技术:ORM思想,hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,...

    hibernate相关配置 3种状态

    2. Hibernate对象的三种状态: -瞬时态(Transient):对象刚刚被创建,尚未与Session关联,也没有持久化到数据库中。如果对象在这个状态下被垃圾收集器回收,那么对象的信息将会丢失。 -持久态(Persistent):...

    hibernate三态详解.doc

    在 Hibernate 中,对象的状态管理是其核心...了解 Hibernate 的对象状态及其转换规则,有助于编写更高效、更稳定的代码,避免出现数据一致性问题。正确地管理和操作对象状态,是使用 Hibernate 进行数据库操作的关键。

    域对象在持久化层的状态

    每种状态都代表了对象与持久化框架(如Hibernate)之间的不同关系,进而影响着对象的生命周期管理和数据库交互策略。 1. **临时状态**:对象刚被创建但尚未与任何持久化会话(Session)关联时所处的状态。这种状态...

Global site tag (gtag.js) - Google Analytics