最近正在研读《深入浅出Hibernate》一书,前面写的随笔有些也是读该书的笔记,只是未做归类,从这篇开始,我将把相关的内容都整理成一个系列的读书笔记。
今天这篇是有关实体对象的生命周期。我刚开始接触Hibernate的时候,只是简单的把它当做一个API工具,直到后来看到有关VO和PO的内容时,才意识到Hibernate不仅仅是一个O/R Mapping的API工具,它还是一个容器。它可以帮你管理实体对象的生命周期。
实体对象的生命周期有三种状态:
1.Transient(自由状态)
此时的实体对象和数据库中的记录无关联,只是一个普通的JavaBean。
2.Persistent(持久状态)
此时的实体对象和数据库中的记录有关联,其变更将由Hibernate固化到数据库中。该实体对象处于由Hibernate框架所管理的状态。
3.Detached(游离状态)
处于Persistent状态的对象,其对应的Session实例关闭之后,那么,此对象就处于"Detached"状态。Detached状态和Transient状态的区别在于Detached状态的对象可以再次与某个Session实例相关联而成为Persistent对象。
从实体对象是否被纳入Hibernate实体管理容器的角度,Transient和Detached状态的实体对象可以统称为VO(Value Object),而被管理的实体对象称为PO(Persistent Object)。两者的区别:
1.VO是相对独立的实体对象,处于非管理状态。
2.PO是Hibernate纳入其实体管理容器(Entity Map)的对象,它代表了与数据库中某条记录对应的Hibernate实体,PO的变化在事务提交时将反映到实际数据库中。
3.如果一个PO与其对应的Session实例分离,那么此时,它又会变成一个VO。
下图是我画的实体对象生命周期的状态转换图:
既然Transient状态的实体与Detached状态的实体都与Hibernate的实体管理容器没有关系,那他们到底存在哪些差异?
差异就在于处于Transient状态的只有一个Name的属性.此时的test对象所包含的数据信息仅限于此,他与数据库中的记录没有任何瓜葛.但是处于Detached状态的实体已经不止包含Name这个属性,还被赋予了主键也就是通常POJO里的id属性,由于id是主键,他可以确定数据库表中的一条唯一的记录,那么自然的处于Detached状态的实体就能与数据库表中拥有相同id的记录相关联.这就是他们之间所存在的差异,简而言之,Transient状态的实体缺乏与数据库表记录之间的联系,而Detached状态的实体恰恰相反.只不过是脱离了session这个数据库操作平台而已.
- 大小: 18 KB
分享到:
相关推荐
在IT行业中,尤其是在Java开发领域,实体对象的生命周期管理是至关重要的一个环节,尤其是在使用ORM(Object-Relational Mapping)框架如Hibernate时。本文将详细探讨“测试实体对象的生命周期”,并结合给定的标签...
实体监听器是一种特殊的类,它可以监听实体对象生命周期中的某些事件,如插入、更新或删除等,并在这些事件发生前后执行特定的操作。实体监听器主要用于日志记录、数据验证等场景。 1. **实体监听器注解** 实体...
9. **生命周期方法**:在某些编程语言和框架中,领域对象可能包含一些生命周期方法,如 `save()`、`delete()`、`load()` 等,用于操作对象的生命周期。 10. **CQRS(命令查询责任分离)**:在复杂系统中,CQRS 模式...
领域对象的生命周期是指从创建到销毁的过程中,对象经历的各种状态及其变化。这个主题通常与面向对象编程(OOP)和领域驱动设计(DDD)紧密相关。下面我们将深入探讨领域对象的生命周期及其相关知识点。 首先,我们...
总之,《深入浅出Hibernate》读书笔记涵盖了实体对象生命周期的转换、实体对象的识别机制以及Hibernate的多级缓存策略,这些都是理解并有效使用Hibernate的关键点。通过深入学习这些概念,开发者能够更好地掌握...
资源服务于信息系统安全运维的各个环节,服务于实体对象生命周期的各个安全环节,资源的安全性主要是资源管理的范畴。 8. 管理管理者运维人员管理: 管理管理者运维人员管理是信息安全运维工作的重要环节,需要...
首先,让我们详细解析Hibernate的实体对象生命周期。 在Hibernate中,实体对象经历了三种不同的状态,它们分别是: 1. **Transient(自由状态)**:这是对象在内存中创建但尚未与数据库记录关联的状态。在代码示例...
2. **persist()**:同样将对象标记为持久态,适用于新的实体对象,与save()类似,延迟到事务提交时执行SQL。 3. **update()**:将脱管态对象重新关联到Session,如果对象属性有变化,会更新数据库记录。适用于已知...
本笔记主要涵盖了建立第一个Hibernate项目的步骤,以及关于实体对象生命周期、CRUD操作、实体类与数据库表的映射、多对一关联、一对一主键关联等核心知识点。 一、第一个Hibernate项目 1. 创建Java项目:这是所有...
在Delphi编程环境中,对象生命周期管理是至关重要的,它涉及到对象的创建、使用以及销毁,以确保程序的正确运行和资源的有效利用。Delphi是一种基于Windows的开发工具,使用Win32 API进行底层操作,同时也支持面向...
##### 实体对象生命周期 实体对象的生命周期是指对象在应用中的不同状态。了解这些状态对于理解Hibernate如何管理对象至关重要。 - **Transient(自由状态)**:当一个对象被创建但尚未被保存到数据库时,它处于...
Hibernate OGM 实现了 JPA 规范,提供了完整的 JPA 支持和实体对象生命周期管理等功能。 Hibernate OGM 的优势 使用 Hibernate OGM,我们可以轻松地将基于 Hibernate ORM 的项目迁移到 NoSQL 数据库上,而不需要...
#### 实体对象生命周期 实体对象的生命周期包括三种状态:自由状态(Transient)、持久状态(Persistent)和游离状态(Detached)。 - **自由状态**(Transient): 实体对象在内存中自由存在,它与数据库中的记录...
- 它是一种用于管理Java应用程序中的实体对象生命周期的标准API。 - JPA允许开发者使用注解或XML配置来定义实体类与数据库表之间的映射关系。 3. **重要特性**: - **简化开发模型**:EJB 3.0采用了更为简洁的...
Session对象负责管理实体对象的状态,包括保存、更新、删除和检索数据。它的生命周期主要包括以下几个阶段: 1. **创建Session**: 当我们调用`SessionFactory.openSession()`方法时,一个新的Session实例就会被...
Java Persistence API是一种用于管理Java应用程序中实体对象生命周期的标准API。它提供了一个标准的方法来存储和检索持久化对象的数据到数据库。JPA的目标是为Java SE和Java EE环境提供一种简单而强大的对象关系映射...
Hibernate实体对象生命周期的三种状态 - **瞬态(Transient)**:未被持久化的实体对象。 - **持久态(Persistent)**:已与Session关联,且Session处于打开状态的实体对象。 - **游离态(Detached)**:与Session...
8. **生命周期管理**:可能包含了对实体对象生命周期的支持,如自动初始化和清理,便于开发者管理对象状态。 9. **事务支持**:为复杂的数据库操作提供事务支持,确保数据操作的原子性、一致性、隔离性和持久性。 ...