`
leh627
  • 浏览: 23801 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

持久化对象在Hibernate三状态解析

阅读更多
作者:佚名 文章来源:javaresearch 点击数:255 更新时间:2009-9-24 9:36:33

本文向大家介绍Hibernate持久化对象,可能好多人还不了解Hibernate持久化对象,没有关系,看完本文你肯定有不少收获,希望本文能教会你更多东西。

大家都知道,Java对象的生命周期,是从通过new语句创建开始,到不再被任何引用变量引用结束,结束后它占用的内存将被JVM垃圾回收机制收回。在Hibernate持久化对象可以划分为三种状态,分别是瞬态,持久态,脱管态。

1.瞬态(Transient),也叫临时态。处于这种状态的对象具备的特征如下:

◆不在Session的缓存中,不与任何的Session实例相关联。

◆在数据库中没有与之相对应的记录。

2.持久态(Persistent),处于这种状态的对象具备的特征如下:

◆在Session的缓存中,与Session实例相关联。

◆在数据库中存在与之相对应的记录。

3.脱管态(Detached),也叫游离态。处于这种状态的对象具备的特征如下:

◆不在Session的缓存中,不与任何的Session实例相关联。

◆在数据库中存在与之相对应的记录。(前提条件是没有其他Session实例删除该条记录)。

持久化对象的三种状态是可以相互转化的,具体转换过程如图所示:





新new出来的对象如Student stu = new Student(),就是瞬时对象,它在内存中孤立存在,它的意义是携带信息的载体,不和数据库的数据有任何关联。

通过Session的save()或saveOrUpdate()方法可以把一个瞬时对象与数据库相关联,并把瞬时对象携带的信息通过配置文件所做的映射插入到数据库中,这个瞬时对象就转化成了持久对象(使用get(),load()等方法查询到的数据对象,一出场就是持久对象),并拥有和数据库记录相同的id标识(Hibernate自动将id值赋予它)。

如果这时候使用delete()方法,它就会变回瞬时对象,删除了数据库与这个对象关联的记录,对象与数据库不再有任何的关联。当一个Session指定close()或clear(),evict()之后,持久对象就变成脱管对象,这时对象的id虽然拥有数据库识别值,但他们目前并不在Hibernate持久层的管理下,它与瞬时对象的本质是相同的,只不过比瞬时对象多了数据标识的id值。

脱管对象的引用依然有效,对象可以继续被修改,当它重新被关联到某个新的Session上时,会再次变成持久对象(脱管状态期间的改动将被持久化到数据库上)。脱管对象拥有数据库识别值id,所以它可以通过update(),saveOrUpdate(),lock()等方法,再度与持久层关联。
  • 大小: 32.8 KB
分享到:
评论

相关推荐

    域对象在持久化层的状态

    3. **游离状态**:当Session关闭或事务结束后,持久化对象会变成游离状态。尽管这些对象不再受Session管理,但它们仍保留着之前从数据库加载的数据,除非显式地进行更新操作,否则不会触发与数据库的交互。 #### 二...

    精通Hibernate:Java对象持久化详解.zip

    《精通Hibernate:Java对象持久化详解》是一本深入解析Hibernate技术的专著,它主要针对Java开发者,旨在帮助他们理解和掌握Java对象持久化的精髓。Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了...

    HIBERNATE - 符合Java习惯的关系数据库持久化

    1. **概览**:提供了一个整体视图,展示Hibernate如何处理持久化对象,包括Session、SessionFactory、Transaction等核心组件。 2. **对象状态**:Hibernate管理的对象具有三种状态:瞬时态(Transient)、持久态...

    精通Hibernate:Java持久化对象技术详解[第二版]

    《精通Hibernate:Java持久化对象技术详解[第二版]》是一部深入探讨Hibernate框架的专业书籍,旨在帮助Java开发者熟练掌握和运用这一强大的ORM(Object-Relational Mapping)工具。Hibernate是Java开发领域中广泛...

    精通hibernate源码ch5

    持久化对象的修改会自动同步到数据库。 2. **临时状态**:新创建的对象,未被Session管理,处于临时状态。它们的修改不会被持久化,除非被Session管理。 3. **游离状态**:已持久化的对象如果脱离了Session的管理...

    hibernate课件 持久化

    在Hibernate中,对象的状态非常重要,主要有瞬时态、持久态和脱管态三种: - **瞬时态**:未被Session管理的对象,没有持久化到数据库中。 - **持久态**:被Session管理的对象,已持久化到数据库中。 - **脱管态**...

    hibernate三状态

    在Java的持久化框架中,Hibernate是一个非常重要的工具,它为开发者提供了强大的对象关系映射(ORM)功能,简化了数据库操作。其中,Hibernate的对象状态管理是其核心特性之一,理解并掌握对象的三种状态对于有效...

    hibernate-符合Java习惯的关系数据库持久化

    “hibernate-符合Java习惯的关系数据库持久化”这一标题明确指出了我们要探讨的主题——Hibernate,这是一个非常流行的Java ORM(对象关系映射)框架,它使得Java开发者能够按照面向对象的方式来操作数据库,而无需...

    Hibernate原理解析

    在Hibernate中,每个持久化类都代表数据库中的一张表,类的实例对应表中的记录。通过在类上添加注解或配置文件,我们可以定义对象和表之间的映射关系。 4. **查询语言(HQL)** Hibernate提供了一种面向对象的...

    精通hibernate源码ch4

    3. 删除(Delete):Session的delete()方法用于从数据库中删除持久化对象。对象必须处于持久态或游离态才能执行删除操作。 四、Session和Transaction Session是Hibernate的主要工作单元,它维护了对象与数据库之间...

    Hibernate源码解析(一)

    Hibernate是由 Gavin King 创建的一个开源项目,它提供了一种在Java应用中持久化对象到关系数据库的解决方案。通过ORM,Hibernate将对象模型与关系数据库模型进行映射,使得开发人员可以使用面向对象的方式来处理...

    精通hibernate源码ch3

    2. Entity:表示数据库中的表,是持久化对象的Java类。 3. Mapping文件或注解:定义了Java对象和数据库表之间的映射关系。 4. Query:提供了对数据进行查询的API,包括HQL(Hibernate Query Language)和Criteria ...

    精通Hibernate:Java對象持久化技術詳解

    《精通Hibernate:Java對象持久化技術詳解》是一本深度解析Hibernate的教程,它旨在帮助Java开发者深入了解和掌握对象关系映射(ORM)技术,特别是通过Hibernate框架实现的持久化机制。Hibernate作为Java领域中广泛...

    Hibernate源码解析(二)

    在本篇《Hibernate源码解析(二)》中,我们将深入探讨Hibernate这一强大的Java对象关系映射(ORM)框架的内部工作原理。这篇博客旨在帮助开发者更好地理解Hibernate的核心机制,以便于更高效地利用它来处理数据库...

    对象持久化

    ### 对象持久化:深入解析与机制探讨 #### 引言 在软件开发领域,对象持久化是一项核心技能,尤其对于构建复杂应用系统至关重要。它不仅关乎数据的存储与检索,更涉及对象状态的管理与数据库交互的优化。本文旨在...

    Hibernate第三方类库

    Hibernate是一款强大的Java持久化框架,它简化了数据库与Java对象之间的交互。在使用Hibernate时,除了核心的Hibernate库,我们通常还需要引入一些第三方类库来增强其功能或满足特定需求。这里提到了三个重要的第三...

    Hibernate的高级操作[归纳].pdf

    3. **Detached(脱管状态)**:这是持久化对象在关闭Session后进入的状态,虽然它曾经是持久化的,但现在与当前Session无关。在Detached状态下,对象的变更不会自动同步到数据库,除非再次将对象与Session关联并调用...

Global site tag (gtag.js) - Google Analytics