- 临时状态(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把临时对象转变为持久化对象。
load或get返回的对象总是持久化状态。
query接口方法返回的list存放的都是持久化对象。
update、save、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,此时需要在配置文件中设置id的unsaved-value为0。
分享到:
相关推荐
在Java开发中,持久化是将应用程序中的对象状态保存到持久存储介质(如数据库)的过程。Hibernate通过提供一种对象-关系映射机制,使得Java对象可以直接与数据库表进行交互,而无需编写大量的SQL语句。这种映射机制...
《精通Hibernate:Java对象持久化技术详解》一书聚焦于Java开发中的对象持久化技术,主要围绕Hibernate这一流行ORM框架进行深入探讨。Hibernate是Java世界里的重要工具,它简化了数据库操作,使得开发者可以更加专注...
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()...
- **概念**:对象持久化是指将程序中的对象状态保存到外部存储介质的过程,以便在系统重启后仍然可以恢复这些对象的状态。 - **实现方式**:在Java中,常见的对象持久化方式包括使用Java序列化机制、XML文件、数据库...
【精通Hibernate:Java对象持久化技术】主要涵盖了Java应用程序的分层体系结构、软件模型以及对象持久化的概念,特别是如何使用Hibernate这一ORM框架进行持久化操作。以下是详细的知识点解析: 1. **应用程序分层...
8. **实体生命周期**:详解Hibernate对对象状态的管理,包括瞬时态、持久态、游离态和脱管态,以及对象状态转换和事件监听器。 9. **多态和继承映射**:讲解如何处理类的继承关系,实现多态查询,包括单表继承、...
在Java的持久化框架Hibernate中,对象的状态是理解其工作原理的关键部分。这些状态决定了对象与数据库之间的关联程度,以及Hibernate如何处理对象的生命周期。以下是Hibernate对象的三种主要状态及其特点: 1) 临时...
在Java的持久化框架Hibernate中,对象存在三种不同的状态,分别是持久态(Persistent)、自由态(Transient)和游离态(Detached)。这三种状态分别对应了对象与数据库的关联程度,理解它们对于高效地使用Hibernate...
【标题】基于Hibernate的Java对象持久化技术在农户征信管理平台设计中的应用 【内容详解】 在现代软件开发中,数据库管理和数据持久化是至关重要的环节。Hibernate作为一款优秀的Java对象关系映射(ORM)框架,极...
了解实体类、持久化属性、主键、对象状态等基本术语。 2. **配置与环境搭建**:学习如何配置Hibernate,包括hibernate.cfg.xml文件的编写,以及JDBC连接池的设置。 3. **对象关系映射(ORM)**:研究Hibernate的...
它们没有持久化标识(ID),在Hibernate的眼里,这些对象就像普通的Java对象,如果程序结束或者对象引用丢失,这些对象就会被垃圾回收器清除,数据不会保存到数据库中。在Hibernate中,通过`new`关键字创建的对象...
在 Hibernate 框架中,Java 对象的状态管理和 Session 缓存是核心概念,它们直接影响着数据的持久化过程和数据库...同时,根据具体应用需求,选择合适的缓存清理策略和对象状态转换时机,以达到最佳的数据库操作效果。
Hibernate 是一个流行的 Java 开发框架,用于简化数据库...理解 Hibernate 对象状态及其转换对于有效管理和优化数据库操作至关重要。正确使用这些状态和保存方法能够避免数据冗余和丢失,提高应用的性能和数据一致性。
在Java的ORM框架Hibernate中,实体管理是其核心功能之一,而实体的状态管理则是理解Hibernate工作原理的关键。本文将深入探讨Hibernate中的实体状态及其转换,帮助开发者更好地掌握如何有效地使用Hibernate进行数据...
- 当使用`new`关键字创建一个新的Java对象时,该对象是瞬时的。这意味着它们与数据库没有任何关联。如果对象不再被引用,它们会被垃圾回收器回收。瞬时对象不处于任何Session的缓存中,数据库中也没有对应的记录。...
1. **Hibernate框架**:Hibernate是一个开源的Java ORM框架,它简化了Java应用与关系数据库之间的交互,通过将Java对象映射到数据库表,实现了对象的持久化。 2. **配置文件**:在Hibernate Tryout项目中,`...
在Java编程中,直接处理SQL语句可能会导致代码冗余且难以维护,而Hibernate通过将Java对象与数据库表进行映射,使得我们可以用面向对象的方式来处理数据,极大地提高了开发效率。 在“HIBERNATE - 符合Java习惯的...
为了使一个Java对象成为持久化对象,我们需要使用Hibernate的注解或XML配置文件来定义映射。注解方式更简洁,例如,`@Entity`表示这个类是一个实体,`@Table(name="users")`指定对应的数据库表,`@Id`和`@...
在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互。本篇将详细讲解如何使用Hibernate来操纵持久化对象,这对于深入理解Hibernate的核心概念至关重要。 **一、...