`
NistCK
  • 浏览: 38719 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

Hibernate持久化的实现——实体对象的生命周期

阅读更多

 

实体对象的三种状态(生命周期中的三种状态):


(1)  Transient:在内存中的自由存在,与数据库中的记录无关。

public void methodA { 
    TUser user = new TUser(); 
    user.setName("Emma");            ---user与数据库中的记录没有关联。 
} 

 
(2)  Persistent:处于由Hibernate框架所管理的状态。实体对象的引用被纳入Hibernate实体容器中加以管理。

TUser user = new TUser(); 
TUser anotherUser = new TUser(); 

user.setName("Emma"); 
anotherUser.setName("Kevin"); 
//此时user和anotherUser都处于Transient状态 

Transaction tx = session.beginTransaction(); 
session.save(user); 
//此时的user对象已经由Hibernate纳入实体管理容器,处于Persistent状态 
//而anotherUser仍然处于Transient状态。 
tx.commit(); 
//事务提交之后,库表中已经插入一条用户"Emma"的记录 
//对于anotherUser则无任何操作 

Transaction tx2 = session.beginTransaction(); 
user.setName("Emma_1"); //Persistent 
anotherUser.setName("Kevin_1"); //Transient 

tx2.commit(); 

 

虽然这个事务中我们没有显式调用Session.save()方法保存user对象,但是由于处于
Persistent状态的对象将自动被固化到数据库中,因此user对象的变化也将被同步到
数据库中,也就是说数据库中"Emma"的用户记录已经被更新为"Emma_1"

此时anotherUser仍然是个普通Java对象,处于Transient状态,它不受Hibernate

框架管理,因此其属性的更改也不会对数据库产生任何影响.

Transient  ------Session.save()------>  Persistent
Object       ------Session.load()------>   Persistent
(Object    ---Session(有效期内)----->   Persistent)

//由Hibernate返回的Persistent对象 
TUser user = (TUser)session.load(TUser.class,new Integer(1)); 
//Session.load方法中,在返回对象之前,Hibernate就已经将其对象纳入 
//其实体容器中 

 

Persistent对象 <------  一一对应 ------> 数据库中的一条记录

(3)  Detached:
Oberct(Persistent) -----对应的Session实例关闭-----> Object(Detached)

TUser user = new TUser(); 
user.setName("Emma");//user in Transistent 
Transaction tx = session.beginTransaction(); 
session.save(user);//user in Persistent 
tx.commit(); 
session.close();//user in Detached 

 
Detached 与 Transient的区别:
Detached对象可以再次与某个Session实例相关联而成为Persistent对象(Transient也可以,但其内部不一样)---Transient状态的user与库表中的数据缺乏对应关系,而Deatached状态的user却在库表中存在相应的记录(由主键唯一确定)。

人工制造一个Detached对象:

TUser user = new TUser(); 
user.setName("Emma"); 
//硬编码为其指定主键值(假设库表中存在id=1的记录) 
user.setId(new Integer(1)); 
//此时user成为一个"人造detached对象" 

Transaction tx = session.beginTransaction(); 
session.update(user);//Session根据其主键值,将其变为Persistent 
user.setAge(new Integer(20)); 
tx.commit(); 

session.flush(); 
session.close(); 

 

Object(Persistent)---Session.delete()--->Object(Transient)


Transient: 从库表中找不到对应的记录。
Detached: 从库表中能找到对应的记录(只是没有与session进行关联)。

一般而言,应该避免直接将PO传递到系统中的其他层面,一种解决办法是,通过构造一个新的VO,通过属性父指示器具备与PO相同的属性值,并以其为传输媒质(实际上,这个VO被用作Data Transfer Object,即DTO),将此VO传递给其他层面以实现必须的数据传送。

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Hibernate 对象持久化

    在Hibernate中,对象的生命周期包括瞬时态、托管态、持久态和脱管态。通过Hibernate,我们可以轻松地将对象从内存中保存到数据库,或者从数据库中加载到内存。 **三、Hibernate配置** 使用Hibernate,首先需要配置...

    Hibernate实体层设计

    在Java企业级应用开发中,持久化层的处理是一个至关重要的环节,而Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本资料主要探讨的是如何利用Hibernate进行高效且灵活的实体层设计。 ...

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

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

    hibernate培训ppt

    【hibernate培训ppt】这份53页的资料主要涵盖了对象/关系映射(O/R Mapping)的概念,以及Hibernate框架的入门、映射声明、对象状态与生命周期、查询及最佳实践等内容。对于有一定Java、SQL和JDBC基础,且熟悉面向...

    Hibernate 转译中文版

    9. **事件监听器**:Hibernate允许自定义事件监听器,实现对对象生命周期各个阶段的监听,如保存、更新、加载、删除等,可以进行一些额外的操作。 10. **类型转换**:Hibernate支持自定义类型转换,允许开发者将...

    Hibernate的高级操作

    #### Hibernate持久化实现 在深入探讨Hibernate的高级特性之前,我们先回顾一下基础概念:Hibernate是一种对象关系映射(Object-Relational Mapping, ORM)框架,它能够将Java对象映射到数据库表,并提供了一系列...

    Hibernate快速入门

    Hibernate是一款强大的Java持久化框架,它为...掌握这些知识点,你就能顺利地开始使用Hibernate进行数据库操作,实现Java应用的高效持久化。在实践中不断探索和优化,你将能更深入地理解和运用Hibernate的强大功能。

    Hibernate 中文文档

    **实体生命周期** Hibernate 管理实体的生命周期,从瞬态到持久化,再到托管和游离,开发者可以通过 Session 的各种方法控制这些状态的转换。 **一对一、一对多、多对一、多对多关系映射** Hibernate 支持多种...

    hibernate培训

    **四、持久化对象的状态和生命周期** Hibernate管理的对象有三种状态:瞬时态、持久态和脱管态。理解这些状态对于掌握对象的生命周期至关重要,它影响了对象创建、更新、删除及查询时的行为。 **五、Hibernate查询*...

    hibernate全套学习课件ppt

    13. **实体生命周期**:Hibernate定义了几个关键的生命周期状态,如瞬时态、持久态、游离态和脱管态,理解这些状态有助于更好地管理对象。 本套课件详细讲解了上述知识点,并可能包含实际案例和练习,是学习...

    Hibernate培训ppt

    **四、持久化对象的状态和生命周期** Hibernate管理的对象有四种状态:瞬时态、持久态、托管态和脱管态。了解这些状态及其转换对于理解对象的生命周期和事务管理至关重要。 **五、Hibernate查询** Hibernate支持...

    Hibernate开发指南.pdf

    10. **实体生命周期**:详细阐述Hibernate中实体的生命周期,包括持久化状态、临时状态、游离状态和删除状态,以及状态转换的方法。 11. **联合实体映射**:讲解如何处理复杂的数据结构,如联合主键和复合实体。 ...

    j2ee项目实训——hibernate框架技术

    3. Session:Hibernate的主要工作接口,负责管理实体对象的生命周期,如持久化、加载、更新和删除等操作。 4. Transaction:事务管理,Hibernate提供了事务API,确保数据的一致性和完整性。 三、Hibernate配置 1. ...

    JAVA论坛系统源码(Struts 2+Hibernate+Spring实现)

    通过配置XML映射文件,Hibernate可以将Java对象与数据库表对应,从而实现数据的透明持久化。 3. **Spring框架**:Spring是Java企业级应用的核心框架,提供依赖注入(DI)和面向切面编程(AOP)等功能,增强了代码的...

    HibernateDemo

    它是Hibernate的核心对象,根据配置文件生成,并在整个应用生命周期内保持不变。 在"HibernateDemo01"这个项目中,可能包含了以下步骤和示例: 1. **配置环境**:首先,我们需要配置Hibernate的环境,这包括设置...

    Beginning Hibernate, 3rd Edition

    3. Java持久化标准(JPA):书中向读者介绍了当前Java中对象关系持久化的标准——Java持久化API(JPA),以及如何在Hibernate中实现JPA规范。 4. 注解映射:详细阐述了如何使用注解(Annotations)来定义对象与...

    Struts2+Spring+Hibernate框架技术与项目实战——上

    Spring作为整体的容器,负责管理Struts2和Hibernate的生命周期,同时提供事务管理。Struts2负责处理HTTP请求,调用Spring管理的业务服务,然后通过Hibernate进行数据操作。这样的集成方式既利用了Struts2的优秀表现...

    harnessing_hibernate3 源码和书

    通过配置XML或使用注解,开发者可以定义对象类与数据库表的对应关系,从而实现对象的持久化。 2. **Hibernate配置**:理解Hibernate的配置文件(hibernate.cfg.xml)至关重要,其中包含了数据库连接信息、缓存策略...

    夏昕.深入浅出Hibernate

    9. **实体生命周期**:Hibernate定义了四个状态——瞬时态、持久态、游离态和删除态,理解这些状态有助于更好地控制和管理实体的生命周期。 通过学习《夏昕.深入浅出Hibernate》,读者将能全面了解Hibernate框架的...

Global site tag (gtag.js) - Google Analytics