瞬时对象(Translent Objects): 使用new操作符初始化的对象不是立刻就持久化的。它们的状态是瞬时的 ,也就是说它们没有任何跟数据库表相关联的行为,只要应用不再引用这些对象(不再被任何其他对象所引用),它们的状态将会丢失,并由垃圾回收机制回收。
持久化对象(Persistent Object): 持久实例是任何具有数据标示的势力。她有持久化管理器Session统一管理,持久实例是在事务中进行操作的——它们的状态在事务结合素同数据库进行同步。当事务提交时,通过执行SQL的INSERT、UPDATE和DELETE语句把内存中的状态同步到数据库中。
离线对象(Detached Objects): Session关闭之后,持久化对象就变为离线对象。离线表示为这个对象不能再与数据库保持同步,它们不再受HIbernate管理。但如果从新开启一个Session来管理这个对象,这个对象又变回持久化对象。
顺时对象和离线对象随时都可能被回收掉。
Translent状态的特征:
* 在数据库中没有与之匹配的数据
* 没有纳入session的管理
Persistent状态的特征:
* 在数据库中有与之相匹配的数据
* 纳入session的管理
* 在清理缓存(脏数据检查)会和数据库同步
Detached 状态的特征:
* 在数据库中有与之相匹配的数据
* 没有纳入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()等方法,再度与持久层关联。
- 大小: 136.9 KB
- 大小: 4.9 KB
分享到:
相关推荐
《精通Hibernate:Java对象持久化详解》是一本深入解析Hibernate技术的专著,它主要针对Java开发者,旨在帮助他们理解和掌握Java对象持久化的精髓。Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了...
在Java的持久化框架Hibernate中,对象存在三种不同的状态,分别是持久态(Persistent)、自由态(Transient)和游离态(Detached)。这三种状态分别对应了对象与数据库的关联程度,理解它们对于高效地使用Hibernate...
持久化对象根据与Session的关系可以分为三种状态:瞬态、持久化和托管。 - **瞬态(Transient)**:对象刚被创建出来,还没有与任何Session建立关联,此时的对象不在Session的管理之下。 - **持久化(Persistent...
"java-hibernate持久化"这个主题主要关注如何使用Hibernate来管理对象的生命周期和状态,以及其内部的一级缓存机制。 首先,我们讨论Hibernate中的持久化对象状态。这些状态定义了对象与Hibernate Session的关系,...
本章主要介绍关系数据库中的代理主键(不具有业务含义),接着介绍Hibernate提供的几种内置标识符生成器的用法及适用范围。 6.1 关系数据库按主键区分不同的记录 123 6.1.1 把主键定义为自动增长标识符类型 123 ...
本章主要介绍关系数据库中的代理主键(不具有业务含义),接着介绍Hibernate提供的几种内置标识符生成器的用法及适用范围。 6.1 关系数据库按主键区分不同的记录 123 6.1.1 把主键定义为自动增长标识符类型 123 ...
1. **概览**:提供了一个整体视图,展示Hibernate如何处理持久化对象,包括Session、SessionFactory、Transaction等核心组件。 2. **对象状态**:Hibernate管理的对象具有三种状态:瞬时态(Transient)、持久态...
使用Hibernate进行对象持久化时,主要有以下几个核心概念: 1. Session:这是Hibernate的核心接口,负责管理对象的生命周期,包括对象的加载、保存、更新和删除。Session也提供了事务管理和缓存机制。 2. ...
### Hibernate 三种状态详解 #### 一、引言 Hibernate 是一款开源的对象关系映射 (ORM) 框架,它极大地简化了 Java 应用程序与数据库之间的交互过程。在 Hibernate 中,对象的状态管理是其核心特性之一,主要包括...
**对象持久化**是指将对象的状态信息(即对象的数据成员)保存到某种持久性存储介质(如硬盘、磁盘等)上的过程。这种方式可以确保即使在应用程序关闭后,对象的状态仍然能够被保留下来,并在需要时重新加载。在Java...
根据实体对象与实体管理器(EntityManager)之间的交互关系,实体对象可以处于以下几种状态: 1. **瞬时状态(Transient State)** 当一个实体对象刚刚被创建出来但还未被实体管理器管理时,它处于瞬时状态。此时...
当对象被持久化后,Hibernate会跟踪其状态变化,自动执行相应的数据库操作。 综上所述,Hibernate通过强大的ORM机制,将Java对象和数据库表之间的关系抽象化,降低了数据库操作的复杂性,提升了开发效率。在Java...
在“HIBERNATE - 符合Java习惯的关系数据库持久化”这个主题中,我们将深入探讨以下几个核心知识点: 1. **对象关系映射(ORM)**:ORM是将数据库中的表映射为Java对象的技术,Hibernate就是这种技术的一种实现。...
其次,持久化(Persistence)则更多地被视为一个动词,表示将对象的状态转化为可持久的形式,以便于长期存储。在Java中,尤其是通过ORM(对象关系映射)工具如Hibernate进行持久化操作时,它将对象与数据库之间的...
在深入了解Hibernate中各种保存方式之前,我们需要先了解对象在Hibernate中的几种状态。对于Hibernate而言,对象的状态主要包括以下三种: 1. **瞬态(Transient)**:也称为自由态。这种状态下的对象尚未与...
2. Entity:表示数据库中的表,是持久化对象的Java类。 3. Mapping文件或注解:定义了Java对象和数据库表之间的映射关系。 4. Query:提供了对数据进行查询的API,包括HQL(Hibernate Query Language)和Criteria ...
本文旨在深入解析对象持久化的概念、重要性,以及几种主流的持久化机制,包括JDBC、对象关系映射(ORM)等,以期为开发者提供全面而深入的理解。 #### 持久化的定义与意义 **持久化**,顾名思义,是指将瞬时存在的...
在Hibernate中,每个持久化对象都有一个唯一的OID,通常对应于数据库表的主键。 #### 三、Hibernate的配置步骤 1. **导入Hibernate的Jar包**:这是使用Hibernate的前提条件。 2. **创建Hibernate配置文件**:通常...
Hibernate定义了实体的几种状态:瞬时态、持久态、游离态和删除态。通过不同的状态转换,Hibernate实现了对象的生命周期管理,如持久化对象的持久化、检索、更新和删除。 九、实体关系映射 Hibernate支持多种关系...