- 浏览: 255373 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (232)
- 瞎扯两句 (8)
- 操作系统 (5)
- 工作笔记 (33)
- 设计模式 (1)
- java (57)
- Java IDE (7)
- hibernate (17)
- oracle (46)
- ms sql (2)
- spring (9)
- struts2 (0)
- javascript (16)
- java_code (2)
- java之集合 (2)
- java之线程 (4)
- java之IO (4)
- java之虚拟机 (6)
- java之异常 (0)
- EJB (4)
- XML (4)
- 数据结构-算法 (2)
- 架构设计 (5)
- 配置信息 (2)
- 阅读笔记 (6)
- IT专业英语 (1)
- PI (0)
- 单元测试 (1)
最新评论
Hibernate的对象有3种状态,分别为:瞬时态(Transient)、持久态(Persistent)、脱管态(Detached)。处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object)。
瞬时态
由new命令开辟内存空间的java对象,
eg. Person person = new Person("xxx", "xx");
如果没有变量对该对象进行引用,它将被java虚拟机回收。
瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在Hibernate中,可通过session的save()或saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变成持久化对象。
持久态
处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化标识。如果是用hibernate的delete()方法,对应的持久对象就变成瞬时对象,因数据库中的对应数据已被删除,该对象不再与数据库的记录关联。
当一个session执行close()或clear()、evict()之后,持久对象变成脱管对象,此时持久对象会变成脱管对象,此时该对象虽然具有数据库识别值,但它已不在HIbernate持久层的管理之下。
持久对象具有如下特点:
1. 和session实例关联;
2. 在数据库中有与之关联的记录。
detached :脱管状态或者游离态
(1) 当通过get 或load方法得到的po对象它们都处于persistent,但如果执行delete(po)时(但不能执行事务),该po状态就处于 detached, (表示和session脱离关联),因delete而变成游离态可以通过save或saveOrUpdate()变成持久态
(2)当把session关闭时,session缓存中的persistent的po对象也变成detached
因关闭session而变成游离态的可以通过lock、save、update变成持久态
持久态 实例可以通过调用 delete()变成脱管状态 。
通过get()或load()方法得到的实例都是持久化状态的。
脱管状态的实例可以通过调用lock()或者replicate()进行持久化。
脱管对象具有如下特点:
1. 本质上与瞬时对象相同,在没有任何变量引用它时,JVM会在适当的时候将它回收;
2. 比瞬时对象多了一个数据库记录标识值。
游离态的特征:游离态的实体对象一定是由持久化实体对象转变来的。游离态的实体对象不再与Session相关联。游离态的实体对象与数据库中的数据没有直接联系。主要表现在对其的修改将不再影响数据库中的数据。游离态实体对象在数据库中有相应的数据记录(如果该记录没有被删除)
代码举例:
//创建一个瞬态对象
User user = new User();
user.setName("username");
user.setPassword("test");
//user仍然是一个瞬态对象
Session Session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
//此时user仍然是瞬态对象
session.save(user);
//此时,user对象已经被纳入到Hibernate的实体管理容器中,并转变为Persistent状态
tx.commit();
//事务被提交后,向数据库的用户中插入一条记录
session.close();
//此时user对象变为了Detached状态。
瞬时态
由new命令开辟内存空间的java对象,
eg. Person person = new Person("xxx", "xx");
如果没有变量对该对象进行引用,它将被java虚拟机回收。
瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在Hibernate中,可通过session的save()或saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变成持久化对象。
持久态
处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化标识。如果是用hibernate的delete()方法,对应的持久对象就变成瞬时对象,因数据库中的对应数据已被删除,该对象不再与数据库的记录关联。
当一个session执行close()或clear()、evict()之后,持久对象变成脱管对象,此时持久对象会变成脱管对象,此时该对象虽然具有数据库识别值,但它已不在HIbernate持久层的管理之下。
持久对象具有如下特点:
1. 和session实例关联;
2. 在数据库中有与之关联的记录。
detached :脱管状态或者游离态
(1) 当通过get 或load方法得到的po对象它们都处于persistent,但如果执行delete(po)时(但不能执行事务),该po状态就处于 detached, (表示和session脱离关联),因delete而变成游离态可以通过save或saveOrUpdate()变成持久态
(2)当把session关闭时,session缓存中的persistent的po对象也变成detached
因关闭session而变成游离态的可以通过lock、save、update变成持久态
持久态 实例可以通过调用 delete()变成脱管状态 。
通过get()或load()方法得到的实例都是持久化状态的。
脱管状态的实例可以通过调用lock()或者replicate()进行持久化。
脱管对象具有如下特点:
1. 本质上与瞬时对象相同,在没有任何变量引用它时,JVM会在适当的时候将它回收;
2. 比瞬时对象多了一个数据库记录标识值。
游离态的特征:游离态的实体对象一定是由持久化实体对象转变来的。游离态的实体对象不再与Session相关联。游离态的实体对象与数据库中的数据没有直接联系。主要表现在对其的修改将不再影响数据库中的数据。游离态实体对象在数据库中有相应的数据记录(如果该记录没有被删除)
代码举例:
//创建一个瞬态对象
User user = new User();
user.setName("username");
user.setPassword("test");
//user仍然是一个瞬态对象
Session Session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
//此时user仍然是瞬态对象
session.save(user);
//此时,user对象已经被纳入到Hibernate的实体管理容器中,并转变为Persistent状态
tx.commit();
//事务被提交后,向数据库的用户中插入一条记录
session.close();
//此时user对象变为了Detached状态。
发表评论
-
浅谈hibernate性能优化的几点建议
2012-05-17 16:41 756浅谈hibernate性能优化的几点建议1、针对oracle数 ... -
AAAAAAAAAAA
2012-05-17 16:22 793相信越来越多的web开发 ... -
hibernate 效率问题总结
2012-05-17 16:14 926一、“精心编写”的JDBC ... -
Hibernate 批量删除 问题
2012-05-17 15:24 862批量处理数据 通常, ... -
Hibernate 二级缓存
2012-04-20 10:35 905二级缓存 Hibernate 对数据的缓存包括两个级: ... -
hibernate之检索策略与检索方式
2012-03-11 10:54 910检索策略包括 立即检索 延迟检索 迫切左外连接 类级别的可以 ... -
spring+hibernate中处理oracle BLOB
2012-02-28 16:11 8741、配置hibernate: 1.1、配置hiber ... -
使用JDBC和Hibernate来写入Blob型数据到Oracle中(1)
2012-02-28 16:09 837转 Oracle的Blob字段比较特殊,他比long字段的性 ... -
HibernateTemplate 源码分析(三)OpenSessionInViewFilter
2012-02-20 11:45 1071OpenSessionInViewFilter作为一个filt ... -
HibernateTemplate 源码分析(二)
2012-02-20 10:44 1102在Spring中使用Hibernate的方法: 因为最终需 ... -
threadlocal threadlocalMap 在hibernate spring中的应用
2012-02-16 16:45 1177之前看资料,总说spring hibernate 是通过thr ... -
理解ThreadLocal
2012-02-16 15:35 731理解ThreadLocal . ThreadLocal是 ... -
Spring+Hibernate 之懒加载问题的解决
2012-02-15 17:30 735http://blog.csdn.net/aspdao/art ... -
关于OpenSessionInView
2012-02-15 16:49 1157关于OpenSessionInView . 简而言之,就是通 ... -
OpenSessionInViewFilter源码分析
2012-02-15 16:32 1169OpenSessionInViewFilter源码 ... -
HibernateTemplate 源码分析 之模板模式(一)
2012-02-15 16:04 146HibernateTemplate 从名成上看,其采用了设计模 ... -
HibernateTemplate 源码分析(一)
2012-02-15 16:02 1HibernateTemplate 从名成上看,其采用了设计模 ... -
关于配置文件中的property属性与set,get方法
2012-02-14 23:34 178一直以为在配置文件中有一个property,对应的class里 ... -
Hibernate.initialize(Obj)用法
2011-07-22 14:57 966转 在使用hibernate进行持久化时,有时需要动态的改 ...
相关推荐
在Java的持久化框架Hibernate中,对象存在三种不同的状态,分别是持久态(Persistent)、自由态(Transient)和游离态(Detached)。这三种状态分别对应了对象与数据库的关联程度,理解它们对于高效地使用Hibernate...
在Java的持久化框架Hibernate中,对象的状态管理是其核心特性之一...总之,理解Hibernate中对象的三种状态以及它们之间的转换对于开发人员来说至关重要。熟练掌握这些概念有助于编写出更加高效、可靠的Java持久化代码。
在Java的ORM框架Hibernate中,实体管理是其...理解并熟练运用Hibernate的实体状态转换,对于优化数据操作和提高代码效率至关重要。在实际开发中,开发者应根据业务需求选择合适的转换方式,确保数据的正确性和一致性。
Java面试题57.hibernate对象状态及其转换.mp4
理解Hibernate的对象状态对于有效地进行数据库操作至关重要。正确管理对象状态可以避免数据丢失、重复插入或其他数据库一致性问题。在开发过程中,应该注意何时创建、保存、更新和删除对象,以及它们与Session的关系...
在Java开发中,Hibernate是一个非常流行的持久...掌握Hibernate对象的这三种状态及其转换规则,对于编写高效、稳定的Java应用程序至关重要,因为它可以帮助开发者更好地管理对象的生命周期,确保数据的一致性和完整性。
在 Hibernate 中,对象有三种不同的状态,这些状态决定了对象与数据库之间的关联程度以及如何进行数据操作。理解这些状态对于有效地使用 Hibernate 至关重要。 1. **瞬时态(Transient)**: - 瞬时态的对象是刚刚...
Hibernate 是一个流行的 Java 开发框架,用于简化数据库...理解 Hibernate 对象状态及其转换对于有效管理和优化数据库操作至关重要。正确使用这些状态和保存方法能够避免数据冗余和丢失,提高应用的性能和数据一致性。
在 Hibernate 框架中,Java 对象的状态管理和 Session 缓存是核心概念,它们直接影响着数据的持久化过程和数据库...同时,根据具体应用需求,选择合适的缓存清理策略和对象状态转换时机,以达到最佳的数据库操作效果。
### Hibernate 三种状态详解 #### 一、引言 Hibernate 是一款开源的对象关系映射 (ORM) 框架,它极大地简化了 Java 应用程序与数据库之间的交互过程。在 Hibernate 中,对象的状态管理是其核心特性之一,主要包括...
java工程师
- 如果对象是瞬时状态,`saveOrUpdate`会调用`save()`,为对象生成一个新的数据库ID并将其状态转换为持久化。 - 如果对象是持久化状态或游离状态,`saveOrUpdate`会调用`update()`,将对象的最新状态同步到数据库。 ...
理解并掌握Hibernate的这三种状态转换对于开发者来说非常重要,因为它直接影响到对象的生命周期管理以及如何有效地更新数据库中的数据。在实际开发中,正确处理这些状态转换可以避免数据一致性问题,提高代码的可...
其中,save()适合新对象的插入,update()用于已存在对象的更新,merge()则是合并当前对象状态到持久化对象,delete()则删除对象。 七、事件监听 Hibernate允许用户自定义监听器,如PreInsertEventListener、...
《Java精通Hibernate对象持久化技术权威指南》是一本深度探讨Java开发中如何高效地使用Hibernate进行对象持久化的专业书籍。本书旨在帮助Java开发者熟练掌握Hibernate框架,实现数据库操作的简化和自动化,提升软件...
高级Hibernate4开发技术:ORM思想,hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,...
高级Hibernate4开发技术:ORM思想,hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,...
2. Hibernate对象的三种状态: -瞬时态(Transient):对象刚刚被创建,尚未与Session关联,也没有持久化到数据库中。如果对象在这个状态下被垃圾收集器回收,那么对象的信息将会丢失。 -持久态(Persistent):...
在 Hibernate 中,对象的状态管理是其核心...了解 Hibernate 的对象状态及其转换规则,有助于编写更高效、更稳定的代码,避免出现数据一致性问题。正确地管理和操作对象状态,是使用 Hibernate 进行数据库操作的关键。
每种状态都代表了对象与持久化框架(如Hibernate)之间的不同关系,进而影响着对象的生命周期管理和数据库交互策略。 1. **临时状态**:对象刚被创建但尚未与任何持久化会话(Session)关联时所处的状态。这种状态...