`

hibernate 三种状态深入分析

阅读更多

Hibernate中有三种状态,对它的深入理解,才能更好的理解hibernate的运行机理,刚开始不太注意这些概念,后来发现它是重要的。对于理解hibernateJVMsql的关系有更好的理解。对于需要持久化的JAVA对象,在它的生命周期中有三种状态,而且互相转化。

1,临时状态(Transient):new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象;

2,持久化状态(Persistent):已经持久化,加入到了Session缓存中。如通过hibernate语句保存的对象。处于此状态的对象叫持久对象;

3,游离状态(Detached):持久化对象脱离了Session的对象。如Session缓存被清空的对象。
特点:已经持久化,但不在
Session缓存中。处于此状态的对象叫游离对象;

×√

临时状态

Transient)

持久化状态

Persistent)

游离状态

Detached)

是否处于Session缓存中

×

×

数据库中是否有对应记录

×

       

 

hibernate3.gif
游离对象和临时对象异同:

两者都不会被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 是持久化对象的过程执行;

分享到:
评论

相关推荐

    05_传智播客hibernate教程_实体对象的三种状态与saveOrUpdate方法

    在本教程中,我们将深入探讨实体对象的三种状态以及`saveOrUpdate`方法的工作原理。 首先,让我们了解实体对象的三种状态: 1. **瞬时状态(Transient)**:当一个新的实体对象在内存中创建,但尚未被Hibernate...

    hibernate源码分析过程

    Hibernate 中的实例状态可以分为三种:transient、persistent 和 detached。transient 状态表示对象尚未被保存到数据库,persistent 状态表示对象已经被保存到数据库,而 detached 状态表示对象已经被从数据库中删除...

    精通hibernate3.0(第三版).rar

    《精通Hibernate 3.0(第三版)》是Java开发者深入理解对象持久化技术的一本经典教程。本书全面覆盖了Hibernate 3.0的核心概念、API以及最佳实践,旨在帮助读者掌握这一强大的ORM(对象关系映射)框架,提升开发效率...

    深入浅出Hibernate(含源码)

    《深入浅出Hibernate》这本书籍结合源码分析,不仅讲解了Hibernate的基本概念和使用方法,还深入探讨了其高级特性及优化技巧,是学习和掌握Hibernate的优秀资源。通过阅读这本书,读者可以更好地理解和运用Hibernate...

    hibernate源码分析一_启动过程_

    **hibernate源码分析:启动过程** 在深入探讨Hibernate启动过程之前,首先需要了解Hibernate是什么。Hibernate是一个开源的对象关系映射(ORM)框架,它为Java开发人员提供了一种在Java应用程序中操作数据库的方式...

    hibernate实战 英文版

    #### 三、书籍特点分析 1. **权威性**:作为由Hibernate项目的创始人和核心贡献者撰写的书籍,《Hibernate实战》在内容上具有无可比拟的权威性。 2. **实用性**:本书不仅仅局限于理论介绍,更注重实践应用,通过...

    Hibernate面试题分析.zip

    通过以上对Hibernate面试题的深入分析,我们可以看到,理解和掌握Hibernate不仅需要理论知识,还需要实践经验。只有在实践中不断探索和优化,才能在面试中脱颖而出,成为真正的Hibernate专家。希望这份资料能够为你...

    Hibernate原理解析

    阅读和分析源代码是深入理解Hibernate原理的有效途径。 总之,Hibernate通过ORM简化了数据库操作,提升了开发效率,而对其原理的深入理解有助于我们更好地应用和优化这个强大的工具。通过不断的实践和探索,我们...

    Hibernate源码解析(一)

    Hibernate是由 Gavin King 创建的一个开源项目,它提供了一种在Java应用中持久化对象到关系数据库的解决方案。通过ORM,Hibernate将对象模型与关系数据库模型进行映射,使得开发人员可以使用面向对象的方式来处理...

    Hibernate概述及实例分析

    【Hibernate概述及实例分析】 Hibernate 是一款在Java环境中广泛应用的对象/关系数据库映射(ORM)框架,它将复杂的数据库操作转化为对Java对象的操作,简化了数据持久化的过程。ORM技术的核心在于将对象模型(如...

    hibernate源码

    在Hibernate中,对象的状态有三种:瞬时态、持久态和脱管态,Session管理着这些对象的状态转换。 其次,Hibernate通过Configuration类来配置数据库连接信息,如数据库URL、用户名、密码等。配置完成后,可以使用`...

    Hibernate源码

    Hibernate源码分析有助于深入理解其内部机制,提高开发效率,优化数据库操作性能。 1. **Hibernate核心模块(hibernate-core)** Hibernate的核心模块包含了ORM框架的主要功能,如实体管理、查询语言(HQL)、事件...

    hibernate-5.2.10最新jar包

    Hibernate将对象分为四种状态:瞬时态、持久态、托管态和游离态,理解这些状态对于正确使用Hibernate至关重要。 5. Hibernate映射机制: 使用XML或注解来定义对象和表之间的映射关系,例如@Entity、@Table、@Id、...

    精通hibernate源码ch5

    三、Hibernate的持久化过程 1. **持久化状态**:当一个Java对象被Session管理并赋予一个唯一的标识符时,它就进入了持久化状态。持久化对象的修改会自动同步到数据库。 2. **临时状态**:新创建的对象,未被...

    JDBC与Hibernate的比较

    本文将详细探讨两种常见的Java数据库访问方式:JDBC(Java Database Connectivity)与Hibernate,并从多个维度进行对比分析。 #### 一、简介 **JDBC**(Java Database Connectivity)是一种用于执行SQL语句的Java ...

    hibernate5.2.7-src源码

    3. 查询机制:Hibernate提供HQL(Hibernate Query Language)和Criteria API两种查询方式,此外,还支持原生SQL查询,满足不同场景需求。 4. 缓存机制:Hibernate包含一级缓存(Session级缓存)和二级缓存...

    HIbernate-tools修改记录

    本文将深入探讨Hibernate-tools的修改记录,帮助开发者更好地理解和应用这一工具。 一、Hibernate-tools概述 Hibernate-tools是Hibernate项目的一个子模块,它扩展了Hibernate的核心功能,提供了诸如代码生成、...

    精通hibernate源码ch3

    4. 对象状态:Hibernate中的对象有四种状态:瞬时态、持久态、脱管态和临时态,理解这些状态有助于更好地管理对象的生命周期。 5. 第二级缓存:除了默认的一级缓存外,Chapter 3可能涉及启用和配置第二级缓存,提高...

    Hibernate 项目图片资料

    Hibernate支持单表继承(Table per Class Hierarchy)、多表继承(Table per Concrete Class)和表分片(Table per Subclass)三种方式。 这些知识点涵盖了Hibernate的基本使用,通过分析压缩包中的图片资源,可以...

    hibernate-3.2源码包

    15. **实体状态管理**:Hibernate 分为瞬时态、持久态、游离态三种对象状态,理解这些状态有助于优化性能并避免数据一致性问题。 通过深入学习和分析 Hibernate 3.2 的源代码,开发者可以更全面地理解其内部工作...

Global site tag (gtag.js) - Google Analytics