- 浏览: 375958 次
- 来自: 北京
文章分类
- 全部博客 (237)
- XML (6)
- JavaSE (39)
- Junit (1)
- Maven (10)
- JavaScript (12)
- JavaEE (16)
- HTML5 (10)
- java多线程 (8)
- Hibernate (30)
- Java反射 (3)
- Spring (11)
- Struts (1)
- svn (2)
- linux (12)
- 代码实例 (1)
- 设计模式 (1)
- UML (1)
- javassist (1)
- Oracle (3)
- Hibernate异常 (9)
- DWR (6)
- Java泛型 (2)
- SpringMVC (11)
- Dbunit (3)
- github (2)
- Algorithm (1)
- zTree (1)
- jquery (7)
- freemarker (4)
- mysql (5)
- ffmpeg (1)
- 编码 (1)
- lucene (15)
- hadoop (1)
- JVM (1)
- Regular Expressions (5)
- myeclipse (1)
- 爬虫 (7)
- 加密 (3)
- WebService (2)
- Socket (2)
- Windows (1)
最新评论
-
wxpsjm:
好直接
HV000030: No validator could be found for type: java.lang.Integer. -
wxhhbdx:
学习了,对新手来说很不错的教程。
SpringMVC入门 (二) 数值传递 -
xgcai:
正好在学dwr
DWR入门 (二)用户实例
摘自 圣思园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
用一个具体实例来看:
这里先实例了一个对象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()方法的时候.
========================
最后附上一张图说明对象的三种状态
●教学内容
-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()方法的时候.
========================
最后附上一张图说明对象的三种状态
发表评论
-
Connection is read-only. Queries leading to data modification are not allowed。
2014-04-06 21:52 3723<tx:advice id="txAdvic ... -
org.hibernate.HibernateException: No Session found for current thread
2014-04-06 12:37 0今天在maven中整合spring和hibernate,并使用 ... -
select new Topic from ' Mysql 生成SQL语句错误
2014-03-30 22:51 1654Caused by: com.mysql.jdbc.exce ... -
Unable to locate appropriate constructor on class
2014-02-20 00:11 1460org.hibernate.hql.internal.ast. ... -
Hibernate的load和get实际应用区分简单实例
2013-12-18 11:58 871今天在看孔浩的CMS视频时候看到的。 在57 -文章管理06 ... -
自定义OpenSessionInViewer过滤器
2013-12-11 12:12 1055摘自孔浩视频 spring部分-17_spring_SSH整合 ... -
数据库事务 (三)虚读(Phantom Read)
2013-12-01 13:21 0关于各种读 虚读 phantom read: 转自维基 ... -
Hibernate悲观锁
2013-11-30 17:30 0为了防止两个线程同时修改一个数据,造成更新数据丢失,我们可以使 ... -
Hibernate查询HQL实例
2013-11-29 15:56 1292三个实体类对象: public class Team { ... -
QBC与HQL检索
2013-11-28 17:39 0QBC(Query By Criteria) API提供了检索 ... -
Hibernate继承映射
2013-11-28 12:36 647继承映射分为三种情况 1.每个子类一张表 比如说有一个Pers ... -
Hibernate通过Composite-element配置外联表实例 (码)
2013-11-28 11:07 1015摘自圣思园Hibenrate 26. 组件映射深度解析 -37 ... -
Hibernate配置复合主键 composite primary key (二)
2013-11-27 16:41 1446摘自圣思园Hibernate 26.组件映射深度解析 上一篇 ... -
Hibernate配置复合主键 composite primary key (一)
2013-11-27 14:15 2454这篇是关于如何配置Hibernate实现复合主键的映射功能。 ... -
Hibernate通过Comparator接口自定义排序规则
2013-11-25 20:42 2515摘自圣思园 Hibernate25.自定义内存排序器详解及符合 ... -
Hibernate配置Set和List
2013-11-25 10:44 1877========================Set==== ... -
Hibernate的Map配置
2013-11-23 16:21 1295摘自圣思园022.Hibernate映 ... -
Hibernate多对多配置
2013-11-21 22:39 875场景: Student和Course,每一个Student有多 ... -
Hibernate延迟加载案例 (多: 一: 一,附代码)
2013-11-21 17:41 590摘自圣思园Hibernate20.一 ... -
Hibernate一对一配置
2013-11-20 21:49 1039摘自圣思园 19.Hibernate的对象检索策略深度解析.a ...
相关推荐
域对象,通常指业务逻辑中的实体类,它们在持久化层中主要存在三种状态:临时状态、持久化状态和游离状态。每种状态都代表了对象与持久化框架(如Hibernate)之间的不同关系,进而影响着对象的生命周期管理和数据库...
Hibernate提供了四种对象状态:瞬时态、持久态、脱管态和临时态,理解这些状态对于有效操纵持久化对象至关重要。 **三、配置Hibernate** 在开始操纵持久化对象之前,需要先配置Hibernate。这包括编写Hibernate配置...
首先,我们来看一下Hibernate中持久化对象的三种基本状态: 1. **瞬时对象(Transient Objects)**: - 当使用`new`关键字创建一个新的Java对象时,该对象是瞬时的。这意味着它们与数据库没有任何关联。如果对象...
Hibernate 操作持久化对象是Java开发中用于简化数据库交互的重要工具。它是一个开源的Java持久化框架,由Gavin King创建,并逐渐发展成为Java世界中主流的持久化解决方案。Hibernate的核心在于提供对象-关系映射(ORM...
本篇文章将详细阐述 Hibernate 中对象的三种状态——临时状态、持久化状态和游离状态,以及 Session 缓存的工作原理。 1. Session 缓存及作用 Session 是 Hibernate 提供的一个接口,它充当了应用程序与数据库之间...
在Java的持久化框架Hibernate中,对象存在三种不同的状态,分别是持久态(Persistent)、自由态(Transient)和游离态(Detached)。这三种状态分别对应了对象与数据库的关联程度,理解它们对于高效地使用Hibernate...
在Java开发中,持久化是将应用程序中的对象状态保存到持久存储介质(如数据库)的过程。Hibernate通过提供一种对象-关系映射机制,使得Java对象可以直接与数据库表进行交互,而无需编写大量的SQL语句。这种映射机制...
在Java的持久化框架Hibernate中,对象的状态管理是其核心功能之一。Hibernate将对象的状态划分为四种:临时状态、持久化状态、游离状态和删除状态。这些状态反映了对象与数据库记录之间的关系,有助于理解Hibernate...
本篇文章主要关注如何通过Hibernate的Session接口来操纵对象,实现数据的持久化。 首先,我们需要理解Session在Hibernate中的角色。Session是Hibernate的核心接口之一,它负责对象的持久化操作,比如保存、更新、...
在Java的持久化框架Hibernate中,对象的状态管理是其核心特性之一。理解并掌握对象的三种状态对于开发高效、稳定的数据库应用至关重要。本篇将详细阐述Hibernate中的瞬时态、持久态和脱管态,以及它们之间的转换。 ...
在Java的持久化框架Hibernate中,对象的状态是理解其工作原理的关键部分。这些状态决定了对象与数据库之间的关联程度,以及Hibernate如何处理对象的生命周期。以下是Hibernate对象的三种主要状态及其特点: 1) 临时...
在软件开发领域,尤其是涉及到关系型数据库管理和对象持久化的场景中,Hibernate 是一款广泛应用的Java ORM(对象关系映射)框架。它允许开发者使用面向对象的编程方式来处理数据库操作,极大地简化了数据访问层的...
在Java应用开发中,对象持久化是一个关键环节,它涉及将程序中的对象状态存储到持久化介质(如关系型数据库)中,并在需要时恢复这些状态。Hibernate作为ORM(对象关系映射)框架,通过提供一种面向对象的方式来处理...
【精通Hibernate:Java对象持久化技术】主要涵盖了Java应用程序的分层体系结构、软件模型以及对象持久化的概念,特别是如何使用Hibernate这一ORM框架进行持久化操作。以下是详细的知识点解析: 1. **应用程序分层...
在Java的持久化框架中,Hibernate是一个非常流行的ORM(对象关系映射)工具,它极大地简化了数据库操作。然而,在某些特定场景下,我们可能并不需要频繁地打开和关闭Session,这时“Hibernate-nosession”就显得尤为...
在Java开发中,数据持久化是将应用程序中的对象状态保存到数据库中的过程,以便在后续的程序运行中可以恢复这些状态。Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了这个过程。本章节我们将深入探讨...
《精通Hibernate:Java对象持久化技术详解》这本书深入剖析了Hibernate这一流行的Java对象关系映射(ORM)框架,旨在帮助开发者全面理解并熟练掌握Hibernate的使用。Hibernate是Java开发中的重要工具,它简化了...
对象持久化是将应用程序中的对象状态存储到持久化介质(如数据库)的过程,使得即使程序关闭,对象的状态也能被保留下来。在Hibernate中,对象的生命周期包括瞬时态、托管态、持久态和脱管态。通过Hibernate,我们...
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接口是Java应用程序与Hibernate之间主要的运行时交互接口,它提供了对持久化对象的创建、读取和删除操作。Session的概念是基于对象的状态管理和数据库事务的,它的生命周期通常与一个物理事务绑定...