在Hibernate中有三种状态,对它的深入理解,才能更好的理解hibernate的运行机理,刚开始不太注意这些概念,后来发现它是重要的。对于理解hibernate,JVM和sql的关系有更好的理解。对于需要持久化的JAVA对象,在它的生命周期中有三种状态,而且互相转化。
1, 临时状态(Transient):用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象;
2, 持久化状态(Persistent):已经持久化,加入到了Session缓存中。如通过hibernate语句保存的对象。处于此状态的对象叫持久对象;
3, 游离状态(Detached):持久化对象脱离了Session的对象。如Session缓存被清空的对象。
特点:已经持久化,但不在Session缓存中。处于此状态的对象叫游离对象;
×√
|
临时状态
(Transient)
|
持久化状态
(Persistent)
|
游离状态
(Detached)
|
是否处于Session缓存中
|
×
|
√
|
×
|
数据库中是否有对应记录
|
×
|
√
|
√
|
|
|
|
|
游离对象和临时对象异同:
两者都不会被Session关联,对象属性和数据库可能不一致;
游离对象有持久化对象关闭Session而转化而来,在内存中还有对象所以此时就变成游离状态了;
Hibernate和SQL的关系:
在操作了hibernate的方法如save()等后,并没有直接生成sql语句,去操作数据库,而是把这些更新存入Session中,只有Session缓存要被更新时,底层的sql语句才能执行,数据存入数据库;
下面举例说明:
一,Session.save(user)运行机理。
1,把User对象加入缓存中,使它变成持久化对象;
2,选用映射文件指定的标识生成ID;
3,在Session清理缓存时候执行:在底层生成一个insert sql语句,把对象存入数据库;
注意:在你执行Session.save(user)后,在Session清理缓存前,如果你修改user对象属性值,那么最终存入数据库的值将是最后修改的值;此过程中ID不能被修改;
二,Session.delete(user)运行过程。
如果user是持久化对象,则执行删除操作,同样底层数据库的执行条件是:在Session清理缓存时候;
如果user是游离对象:
1,将user对象和Session关联,使之成为持久化对象;
2,然后按照user 是持久化对象的过程执行;
分享到:
相关推荐
这是一个讲解了关于hibernate三种状态之间的转换,如果想知道他们之间的相关总结和理解,这是一个不错的选择
在Java的持久化框架Hibernate中,对象存在三种不同的状态,分别是持久态(Persistent)、自由态(Transient)和游离态(Detached)。这三种状态分别对应了对象与数据库的关联程度,理解它们对于高效地使用Hibernate...
在 Hibernate 中,对象有三种不同的状态,这些状态决定了对象与数据库之间的关联程度以及如何进行数据操作。理解这些状态对于有效地使用 Hibernate 至关重要。 1. **瞬时态(Transient)**: - 瞬时态的对象是刚刚...
在Java的持久化框架Hibernate中,对象的状态管理是其核心特性之一...总之,理解Hibernate中对象的三种状态以及它们之间的转换对于开发人员来说至关重要。熟练掌握这些概念有助于编写出更加高效、可靠的Java持久化代码。
Hibernate对象有三种状态:瞬时状态(Transient)、持久状态(Persistent)和脱管状态(Detached)。理解这些状态对于优化数据操作和避免潜在的问题至关重要。 首先,瞬时状态(Transient)是指通过new关键字创建的...
这个`hibernate3.zip`压缩包包含了`hibernate3.jar`,它是Hibernate 3版本的核心库,包含了执行ORM(对象关系映射)所需的所有类和接口。 在Java开发中,Hibernate3主要提供了以下关键知识点: 1. **对象关系映射...
以下是Hibernate对象的三种主要状态及其特点: 1) 临时状态(Transient State): 当通过`new`关键字创建一个新的对象时,该对象处于临时状态。在这个状态下,对象并未与任何Session关联,因此它的变化不会自动反映...
### Hibernate 三种状态详解 #### 一、引言 Hibernate 是一款开源的对象关系映射 (ORM) 框架,它极大地简化了 Java 应用程序与数据库之间的交互过程。在 Hibernate 中,对象的状态管理是其核心特性之一,主要包括...
6. **实体生命周期管理**:Hibernate自动管理对象的生命周期,包括加载、持久化、脱管和删除等状态。 7. **类型转换和用户类型**:Hibernate支持基本数据类型的自动转换,同时也允许自定义复杂类型的映射。 8. **...
首先,我们要了解Hibernate定义的三种实体状态: 1. **临时状态(Transient)**:当我们在程序中通过`new`关键字创建一个实体对象时,它默认处于临时状态。此时,对象未被Hibernate管理,即使对象包含了主键ID,如果...
13. **实体状态**:Hibernate将实体的状态分为瞬时、持久化、脱管和临时四种,理解这些状态对于正确使用Hibernate至关重要。 通过阅读《Hibernate3中文文档》,开发者可以深入学习以上各方面的内容,熟练掌握...
本篇将详细阐述Hibernate中的对象映射关系以及对象的三种状态。 对象映射是Hibernate的核心特性,它通过ORM(Object-Relational Mapping)技术将Java对象与数据库表之间的关系进行映射。Hibernate提供了一种声明式...
11. **状态转换(State Transitions)**: 对象有三种状态:瞬时态、持久态和脱管态。Hibernate管理这些状态的转换,确保对象在数据库中的正确映射。 12. **集合映射(Collection Mapping)**: Hibernate支持多种...
在Hibernate ORM框架中,实体对象可以处于三种不同的状态:瞬时状态(Transient)、持久状态(Persistent)和脱管状态(Detached)。理解这些状态对于有效地管理和更新数据库中的数据至关重要。 **瞬时状态...
Hibernate3是一款著名的Java持久化框架,它为Java开发者提供了一种高效、便捷的方式来操作数据库,大大简化了在Java应用中处理数据库的工作。与传统的JDBC(Java Database Connectivity)相比,Hibernate提供了一种...
Hibernate3 是一个流行的Java持久化框架,用于简化数据库与对象之间的交互。在Java应用程序中,尤其是在企业级应用开发中,Hibernate 提供了强大的ORM(对象关系映射)功能,允许开发者将数据库操作转换为对Java对象...
hibernate中session对象的状态详解
**Hibernate3 源代码详解** Hibernate 是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。通过提供一种抽象层,Hibernate 允许开发人员使用面向对象的方式来处理数据,而无需直接...
HQL 是 Hibernate 自定义的一种面向对象的查询语言,类似于 SQL,但更加面向对象。它可以方便地进行对象级别的查询,支持复杂的条件、分组、排序等操作,甚至能实现联接查询和子查询。 五、 Criteria 查询 除了 HQL...
6. **Criteria查询**: Hibernate 3引入了Criteria API,提供了一种类型安全的动态查询方式,无需预先编写SQL。 7. **Query与HQL**: Hibernate Query Language (HQL) 是Hibernate的面向对象的查询语言,类似于SQL,...