`

hibernate中java对象的状态

 
阅读更多
  • 临时状态(transient):刚刚用new语句创建,没有被持久化,不处于session中。该对象成为临时对象
  • 持久化状态(persistent):已经被持久化,加入到session的缓存中。该状态的对象为持久化对象。
  • 游离状态(detached):已经被持久化,但不处于session中。该状态的对象为游离对象。

程序代码

生命周期

状态

tx = session.beginTransaction();

Customer c = new Customer(“Tom”,new HashSet);

开始生命周期

临时状态

Session.save(c)

处于生命周期中

转变为持久化状态

Long id=c.getId();

c = null;

Customer c2 = (Customer)session.load(Customer.class,id);

tx.commit();

处于生命周期中

处于持久化状态

session.close();

处于生命周期中

转变为游离态

c2,getName();

处于生命周期中

处于游离态

c2 = null;

结束生命周期

结束生命周期


1、临时对象特征

不处于session中,不被任何session关联。数据库中没有对应的记录。以下情况,对象进入临时状态:

(1).new 语句刚创建了一个对象。

(2).session的delete方法使持久化对象或游离对象转变为临时对象,对于游离对象,该方法从数据库中删除记录,对于持久化对

象,该方法从数据库中删除记录,还要删除缓存中的对象。


2、2、持久化对象特征

(1)、位于一个session缓存中,总是被一个session关联。

(2)、持久化对象和数据库记录相对应。

(3)、以下情况,对象进入持久化:

清理缓存时,会根据对象属性变化,同步更新数据库。

save把临时对象转变为持久化对象。

loadget返回的对象总是持久化状态。

query接口方法返回的list存放的都是持久化对象。

updatesave、saveOrUpdate和LockRequest.lock方法使游离对象转变为持久化对象。

在实际的应用程序中应该避免一个java对象被多个session实例关联,会导致重复执行sql语句,并且极容易出现一些并发问题。

3、游离对象特征

不再位于session的缓存中,游离对象不被session关联。
游离对象由持久化转变过来的,因此在数据库中可能还存在与它对应的记录(前提条件是没有其他程序删除了这条记录)。
当与某持久对象关联的session被关闭后,该持久对象转变为游离对象。当游离对象被重新关联到session上时,并再次转变
成持久对象
在以下情况下,持久化对象转变为游离对象:

(1).sesson.close()方法使缓存被清空,缓存中的所有的对象都变为游离对象。如果没有引用他们的话,他们就会结束生命周期。

(2).sesson.evict(Object args)方法从缓存中删除一个持久化对象,使他变为游离态对象。当缓存中保存了大量的持久化对象时,会消耗许多内存空间,使用该方法删掉一些对象来节省空间


对象的生命周期及转换方法如图所示:


4、Session的增、删、改、查方法:

save(Objectargs):

1.对象加入缓存,成为持久化对象。

2.为持久化对象分配OID

update(Objectargs):

将游离对象转变为持久化对象。不论对象属性是否发生变化,该方法都会执行update操作。如果希望仅当属性变化时才执行update语句的话可进行如下配置:

<class name=“”table=“” select-before-update=“true”>

load和get:

从数据库加载指定的OID持久化对象。如果数据库中不存在该记录时,load方法会抛出异常,而get方法返回null。load是延迟加载,get是立刻加载。

delete(Objectargs)

如果参数是持久化对象,就执行一个delete语句,若为游离对象,先使游离对象被session关联,使他变为持久化对象,然后计划执行一个delete语句。


saveOrUpdate(Objectargs):

该方法同时包含save和update方法,如果参数是临时对象就用save方法,如果是游离对象就用update方法,如果是持久化对象就直接返回。

临时对象判断法:

(1).Java对象的OID为null

(2).Java对象具有version属性并取值为null

(3).在映射文件中为<id>元素设置了unsaved-value属性,并且OID属性取值与属

性匹配。

(4).在映射文件中为<version>元素设置了unsaved-value属性,并且version属性取

值与属性匹配。

(5).自定义了hibernate的Interceptor实现类,并且Interceptor 的isUnsaved方法返回Boolean.true,如果id的类型为long,则默认值为0,此时需要在配置文件中设置idunsaved-value0


分享到:
评论

相关推荐

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

    在Java开发中,持久化是将应用程序中的对象状态保存到持久存储介质(如数据库)的过程。Hibernate通过提供一种对象-关系映射机制,使得Java对象可以直接与数据库表进行交互,而无需编写大量的SQL语句。这种映射机制...

    精通Hibernate:Java对象持久化技术详解

    《精通Hibernate:Java对象持久化技术详解》一书聚焦于Java开发中的对象持久化技术,主要围绕Hibernate这一流行ORM框架进行深入探讨。Hibernate是Java世界里的重要工具,它简化了数据库操作,使得开发者可以更加专注...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     8.3 Java对象在Hibernate持久化层的状态  8.3.1 临时对象的特征  8.3.2 持久化对象的特征  8.3.3 被删除对象的特征  8.3.4 游离对象的特征  8.4 Session接口的详细用法  8.4.1 Session的save()和persist()...

    (高清版)精通 Hibernate_Java 对象持久化技术详解(第2版).pdf

    - **概念**:对象持久化是指将程序中的对象状态保存到外部存储介质的过程,以便在系统重启后仍然可以恢复这些对象的状态。 - **实现方式**:在Java中,常见的对象持久化方式包括使用Java序列化机制、XML文件、数据库...

    精通Hibernate:java对象持久化技术

    【精通Hibernate:Java对象持久化技术】主要涵盖了Java应用程序的分层体系结构、软件模型以及对象持久化的概念,特别是如何使用Hibernate这一ORM框架进行持久化操作。以下是详细的知识点解析: 1. **应用程序分层...

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

    8. **实体生命周期**:详解Hibernate对对象状态的管理,包括瞬时态、持久态、游离态和脱管态,以及对象状态转换和事件监听器。 9. **多态和继承映射**:讲解如何处理类的继承关系,实现多态查询,包括单表继承、...

    Hibernate 对象的三种状态和特点

    在Java的持久化框架Hibernate中,对象的状态是理解其工作原理的关键部分。这些状态决定了对象与数据库之间的关联程度,以及Hibernate如何处理对象的生命周期。以下是Hibernate对象的三种主要状态及其特点: 1) 临时...

    hibernate对象三种状态

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

    基于Hibernate的Java对象持久化技术分析--农户征信管理平台的设计

    【标题】基于Hibernate的Java对象持久化技术在农户征信管理平台设计中的应用 【内容详解】 在现代软件开发中,数据库管理和数据持久化是至关重要的环节。Hibernate作为一款优秀的Java对象关系映射(ORM)框架,极...

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

    了解实体类、持久化属性、主键、对象状态等基本术语。 2. **配置与环境搭建**:学习如何配置Hibernate,包括hibernate.cfg.xml文件的编写,以及JDBC连接池的设置。 3. **对象关系映射(ORM)**:研究Hibernate的...

    Hibernate中对象的三种状态

    它们没有持久化标识(ID),在Hibernate的眼里,这些对象就像普通的Java对象,如果程序结束或者对象引用丢失,这些对象就会被垃圾回收器清除,数据不会保存到数据库中。在Hibernate中,通过`new`关键字创建的对象...

    Hibernate对象持久化状态

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

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

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

    Hibernate中的实体状态及转换

    在Java的ORM框架Hibernate中,实体管理是其核心功能之一,而实体的状态管理则是理解Hibernate工作原理的关键。本文将深入探讨Hibernate中的实体状态及其转换,帮助开发者更好地掌握如何有效地使用Hibernate进行数据...

    Hibernate持久化对象的生命周期

    - 当使用`new`关键字创建一个新的Java对象时,该对象是瞬时的。这意味着它们与数据库没有任何关联。如果对象不再被引用,它们会被垃圾回收器回收。瞬时对象不处于任何Session的缓存中,数据库中也没有对应的记录。...

    Hibernate的Java控制台程序Demo

    1. **Hibernate框架**:Hibernate是一个开源的Java ORM框架,它简化了Java应用与关系数据库之间的交互,通过将Java对象映射到数据库表,实现了对象的持久化。 2. **配置文件**:在Hibernate Tryout项目中,`...

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

    在Java编程中,直接处理SQL语句可能会导致代码冗余且难以维护,而Hibernate通过将Java对象与数据库表进行映射,使得我们可以用面向对象的方式来处理数据,极大地提高了开发效率。 在“HIBERNATE - 符合Java习惯的...

    hibernate:java持久化对象详解02

    为了使一个Java对象成为持久化对象,我们需要使用Hibernate的注解或XML配置文件来定义映射。注解方式更简洁,例如,`@Entity`表示这个类是一个实体,`@Table(name="users")`指定对应的数据库表,`@Id`和`@...

    Hibernate 操纵持久化对象

    在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互。本篇将详细讲解如何使用Hibernate来操纵持久化对象,这对于深入理解Hibernate的核心概念至关重要。 **一、...

Global site tag (gtag.js) - Google Analytics