`

域对象在持久化中的三种状态 (Hibernate Session)

阅读更多
摘自 圣思园hibernate17.自身双向一对多关联关系深入解析-28分钟开始

●教学内容
-Session的缓存的作用
-Session清理缓存的时间点
-对象的临时状态,持久化状态和游离状态
-用Session的update()方法使游离态转变成持久化对象.


当Session的save()方法持久化一个User对象时,User对象被加入到Session的缓存中,以后即使应用程序中的引用变量不再引用该User对象, 只要Session的缓存还没有被清空,User对象仍然处于生命周期中。

当Session的load()方法试图从数据库中加载一个User对象时,Session先判断缓存中是否已经存在这个User对象,如果存在,就不需要再到数据库中检索。

三种状态的英文解释:
临时状态-transient:
an object is transient if it has been instantiated using the new operator, and it is not associated with a Hibernate Session. It has no persistent representation in the database and no identifer value has been assigned. Transient instances will be destroyed by the garbage collector if the application does not hold a reference anymore. Use the Hibernate Session to make an object persistent.
(我觉得这里的identifer

持久状态-persistent:
A persistent instance has an identifier value, a representation in the database and is associated with a Session. Hibernate will detect any changes made to an object in persistent state any synchronize the state with the database when the unit of work completes. Developers do not execute manual UPDATE statements, or DELETE statements when an object should be made transient.

游离态-detached:
A detached instance is an object that has been persistent, but its Session has been closed. The reference to the object is still valid, of course, and the detached instance might even be modified in this state. A detached instance can be reattached to a new Session at a later point in time, making it (and all the odifications) persistent again. This feature enables a programming model for long running units of work that require user think-time. We call them application transactions, i.e., a unit of work from the point of view of the user.

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/objectstate.html

用一个具体实例来看:

	public static void main(String[] args)
	{
		Session session = HibernateUtil.openSession();
		
		Transaction tx = null;

		tx = session.beginTransaction();
		
		
		User u1=new User(567,"hi",23); //transient state
		
	 	session.save(u1);   //persistent
		
		User u=(User) session.load(User.class, 567);
		System.out.println(u.getName());
		
		System.out.println(u==u1);
		
		
 
		
		session.close();
		
	 
	}



这里先实例了一个对象User, id是567, name是hi。
此时我们的数据库对象里面已经有了这一列。

由于在执行load之前, session里面已经有了id为567的user对象, 所以在
User u=(User) session.load(User.class, 567);
这里hibernate不会像数据库发送sql请求。

再看看:System.out.println(u==u1);
该代码返回结果为true。

这个结果说明了两点:
1. session里面此时已经包含了这个User对象,如图所示:



2. 当执行load方法时, hibernate会直接查找session中的Entity对象,正好有id为567的User类对象, 于是把该对象引用的内存地址返回, 不再查询数据库。



===================Session的缓存的作用============
1. 减少访问数据库的频率。 应用程序从内存中读取持久化对象的速度显然比到数据库中查询数据的速度快多了,因此Session的缓存可以提高数据访问的性能。
2. 保存缓存中的对象与数据库中的相关记录保持同步。 当缓存中持久化对象的状态发生了变化,Session并不会立即执行相关的SQL语句, 这使得Session能够把几条相关的SQL语句合并为一条SQL语句, 以便减少访问数据库的次数, 从而提高应用程序的性能。

Session清理缓存的时间点
-当应用程序调用org.hibernate.Transaction的commit()方法的时候, commit()方法先清理缓存,然后再向数据库提交事务. 如图:







- 当应用程序显式调用Session的flush()方法的时候.



========================
最后附上一张图说明对象的三种状态






  • 大小: 156.5 KB
  • 大小: 136.9 KB
  • 大小: 165 KB
  • 大小: 99.9 KB
分享到:
评论

相关推荐

    域对象在持久化层的状态

    域对象,通常指业务逻辑中的实体类,它们在持久化层中主要存在三种状态:临时状态、持久化状态和游离状态。每种状态都代表了对象与持久化框架(如Hibernate)之间的不同关系,进而影响着对象的生命周期管理和数据库...

    Hibernate 操纵持久化对象

    Hibernate提供了四种对象状态:瞬时态、持久态、脱管态和临时态,理解这些状态对于有效操纵持久化对象至关重要。 **三、配置Hibernate** 在开始操纵持久化对象之前,需要先配置Hibernate。这包括编写Hibernate配置...

    Hibernate持久化对象的生命周期

    首先,我们来看一下Hibernate中持久化对象的三种基本状态: 1. **瞬时对象(Transient Objects)**: - 当使用`new`关键字创建一个新的Java对象时,该对象是瞬时的。这意味着它们与数据库没有任何关联。如果对象...

    Hibernate操作持久化对象

    Hibernate 操作持久化对象是Java开发中用于简化数据库交互的重要工具。它是一个开源的Java持久化框架,由Gavin King创建,并逐渐发展成为Java世界中主流的持久化解决方案。Hibernate的核心在于提供对象-关系映射(ORM...

    Hibernate对象持久化状态

    本篇文章将详细阐述 Hibernate 中对象的三种状态——临时状态、持久化状态和游离状态,以及 Session 缓存的工作原理。 1. Session 缓存及作用 Session 是 Hibernate 提供的一个接口,它充当了应用程序与数据库之间...

    hibernate对象三种状态

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

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

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

    Hibernate Session 4种对象状态.docx

    在Java的持久化框架Hibernate中,对象的状态管理是其核心功能之一。Hibernate将对象的状态划分为四种:临时状态、持久化状态、游离状态和删除状态。这些状态反映了对象与数据库记录之间的关系,有助于理解Hibernate...

    hibernate--3.Hibernate数据持久化(通过 Session 操纵对象)

    本篇文章主要关注如何通过Hibernate的Session接口来操纵对象,实现数据的持久化。 首先,我们需要理解Session在Hibernate中的角色。Session是Hibernate的核心接口之一,它负责对象的持久化操作,比如保存、更新、...

    Hibernate中对象的三种状态

    在Java的持久化框架Hibernate中,对象的状态管理是其核心特性之一。理解并掌握对象的三种状态对于开发高效、稳定的数据库应用至关重要。本篇将详细阐述Hibernate中的瞬时态、持久态和脱管态,以及它们之间的转换。 ...

    Hibernate 对象的三种状态和特点

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

    hibernate持久化对象生命周期[参照].pdf

    在软件开发领域,尤其是涉及到关系型数据库管理和对象持久化的场景中,Hibernate 是一款广泛应用的Java ORM(对象关系映射)框架。它允许开发者使用面向对象的编程方式来处理数据库操作,极大地简化了数据访问层的...

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

    在Java应用开发中,对象持久化是一个关键环节,它涉及将程序中的对象状态存储到持久化介质(如关系型数据库)中,并在需要时恢复这些状态。Hibernate作为ORM(对象关系映射)框架,通过提供一种面向对象的方式来处理...

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

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

    Hibernate-nosession

    在Java的持久化框架中,Hibernate是一个非常流行的ORM(对象关系映射)工具,它极大地简化了数据库操作。然而,在某些特定场景下,我们可能并不需要频繁地打开和关闭Session,这时“Hibernate-nosession”就显得尤为...

    hibernate5--2.数据持久化及事务

    在Java开发中,数据持久化是将应用程序中的对象状态保存到数据库中的过程,以便在后续的程序运行中可以恢复这些状态。Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了这个过程。本章节我们将深入探讨...

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

    《精通Hibernate:Java对象持久化技术详解》这本书深入剖析了Hibernate这一流行的Java对象关系映射(ORM)框架,旨在帮助开发者全面理解并熟练掌握Hibernate的使用。Hibernate是Java开发中的重要工具,它简化了...

    Hibernate 对象持久化

    对象持久化是将应用程序中的对象状态存储到持久化介质(如数据库)的过程,使得即使程序关闭,对象的状态也能被保留下来。在Hibernate中,对象的生命周期包括瞬时态、托管态、持久态和脱管态。通过Hibernate,我们...

    精通 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的Session的javadoc

    Hibernate的Session接口是Java应用程序与Hibernate之间主要的运行时交互接口,它提供了对持久化对象的创建、读取和删除操作。Session的概念是基于对象的状态管理和数据库事务的,它的生命周期通常与一个物理事务绑定...

Global site tag (gtag.js) - Google Analytics