`
cfeers
  • 浏览: 141488 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

hibernate入门(三):对象的三种状态

阅读更多
三 Session中的主要方法

1.保存数据:save,presist 说明:这两种方法的主要区别主要体现在未开启事务时。save方法如果是没开启事务,会执行相关sql语句,随后再回滚。而presist根本就不执行这些sql语句。

2.删除对象:delete

3.更新数据:update 说明,如果数据库中没有记录将会出现异常

4.查找数据:get,立刻访问数据库  load,返回的是代理,不会立即访问数据库。

5.选择操作:saveOrUpdate,merge,根据id和version的值来确定是save还是update。saveOrUpdate方法的主要作用:可以把瞬时对象或脱管对象转成持久对象,而不需要具体判断对象是处在瞬时态或是脱管态来选择save或update来让对象变成持久态。只要调用此方法就能由id和version来灵活选择是保存或更新。而merge方法一个对象后,对象仍是脱管态。

5.持久对象:lock,把对象变成持久对象,但不会同步对象的状态。

四 对象三种状态:

1.瞬时(transient):数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,一般是new出来的且与Session无关系的对象。

2.脱管-游离(detached):数据库中有数据与之对应,但当前没有Session与之关联:脱管对象状态发生改变,Hibernate不能检测到。

3.持久(persistent):数据库有数据与之对应,当前与Session有关联,并且相关联的Session没有关闭,事务没有提交:持久对象状态发生改变时,在事务提交时会影响到数据库。

理解:与Session是否关联,数据库是否有数据与之对应是判断三种对象状态的依据。比如,瞬时状态跟它们均无关;脱管,只是数据库有数据与之对应,失去了Session对它的管理;而持久与两者有关。

从过程中理解三种对象状态:结合前面的实例,当我们User user=new User()一个对象时,它表示创建一个瞬时对象,当调用save(user)方法时,这个对象成为持久对象,直到事务提交,数据库连接关闭。在这期间,如果我们user.setXXX()时,会对这个持久对象产生影响,最终它也会被提交到数据库,它的最终提交是在提交事务时。比如save(user)方法后,跟user.setName("new name");和user.setPassword("new password");这两句,这样它会在提交时务时,采取对数据库的更新操作,也就是说数据库连接关闭后,数据库存的是“new name”和“new password” 而如果开启了“数据库语言显示”可以发现执行两次操作:一次是save方法的插入操作,一次是setXXX后提交事务时的更新作(特别说明,持久对象在发生改变时,比如setXXX方法改变对象内容时,会在最后,即提交事务时统一进行更新操作,而并非每一次改变就执行一次更新,这样可以保证与数据库的交互更高效合理)。当执行完save方法后,我们关闭数据库连接时,这时的user对象就是脱管状态,因为它在数据库有数据与之对应而脱管状态的最好例子是当我们用get方法得到一个对象并关闭连接时

补充说明:既然我们已经知道了持久对象可以被Hibernate检测到进行更新操作,那么update是否还有用了?有,比如脱管对象就可以调用update来更新数据库中的数据,而调用update()方法后的脱管对象又变成了持久对象。 下面是三种对象状态相互转换的图例:

再谈saveOrUpdate方法:此方法兼具了save和update两种方法。它根据传递的参数来选择执行其中的一种方法。如果参数对象是瞬时态,则执行save方法,而如果参数对象是脱管态,则执行update方法。最终都是把传递的参数对象转成持久态。       如何判断对象的状态?主要依据是看:实体对象id(或者version)取值与实体配置文件中<id>元素的unsaved-value属性值的匹配情况。 只要满足下面的任一情况则可以说明对象处在瞬时态:情况一,实体对象(持久化对象)的id取值为null形式(比如int型为0,字串为null)。 情况二,实体对象(持久化对象)的id取值与预设的unsaved-value属性值不同。 情况三,实体对象(持久化对象)的具有的versionn属性,并且为null。 情况四,实体对象(持久化对象)的version取值与预设的unsaved-value属性值不同

分享到:
评论

相关推荐

    Hibernate基础和入门:新建表和插入表

    7. **持久化对象状态**:Hibernate中的对象有三种状态:瞬时态、持久态和脱管态,理解这些状态有助于理解对象的生命周期。 8. **对象插入**:使用Session的`save()`或`saveOrUpdate()`方法可以将对象持久化到数据库...

    Hibernate入门教程.pdf

    #### 三、Hibernate入门 - **概念理解**:首先需要理解Hibernate的基本概念,包括Session、SessionFactory、Transaction等核心组件的作用。 - **环境搭建**:配置开发环境,包括安装必要的库文件(如Hibernate核心...

    hibernate入门教程

    Hibernate是一种流行的Java ORM(对象关系映射)框架,它用于在Java应用程序和关系数据库之间提供一个桥梁。其主要目标是简化数据库相关的操作,减少开发人员直接使用JDBC API的工作量。通过Hibernate,开发者可以以...

    hibernate官方入门教程 (转载)

    11. **实体状态管理**: Hibernate管理实体的瞬时态、持久态、游离态三种状态,理解这些状态有助于优化数据操作。 12. **事务处理**: Hibernate支持JTA和JDBC两种事务处理方式,保证数据的一致性和完整性。 **从...

    hibernate入门小程序

    **hibernate入门小程序** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了方便的数据持久化服务,使得开发人员可以使用面向对象的方式来操作数据库,而无需过多地关注SQL语句的编写。在...

    hibernate入门与概述

    【hibernate入门与概述】 Hibernate 是一个流行的Java对象关系映射(ORM)框架,它允许开发者使用面向对象的方式操作数据库,将Java类与数据库表进行映射,从而简化数据库操作。本文主要涵盖以下几个核心概念: 1....

    03_传智播客hibernate教程_hibernate入门案例的代码优化

    4. **持久化对象状态**:Hibernate管理对象的三种状态:瞬时态、持久态和脱管态。理解这些状态对于优化代码至关重要,因为它影响了数据的保存和加载方式。 5. **缓存机制**:Hibernate内置了一级缓存和二级缓存。一...

    Hibernate教程1_从入门到精通

    ### Hibernate教程1_从入门到精通 #### 一、ORM概念及Hibernate的作用 - **ORM (Object Relational Mapping)**: 是一种将程序中的对象模型与数据库中的关系模型相互转换的技术。这种技术允许开发者以面向对象的...

    Hibernate入门文档

    Hibernate 难点解析: hibernate中uuid和native的相关总结 Hibernate get与load的区别 hibernate二级缓存中list和...Hibernate中的对象有三种状态: lock和update区别 save 和update区别 update 和saveOrUpdate区别

    Hibernate入门

    【Hibernate入门】章节主要介绍了Hibernate的基本概念和配置,以及如何开始使用Hibernate进行开发。Hibernate是一个流行的Java持久化框架,它的核心功能是实现对象关系映射(Object-Relational Mapping,简称ORM),...

    Hibernate 手册 第一章 Hibernate入门

    《Hibernate 手册 第一章 Hibernate入门》 Hibernate 是一个开放源码的Java持久化框架,它为Java开发者提供了一种对象关系映射工具来管理Java应用中的关系数据。本章将带你逐步走进Hibernate的世界,了解其基本概念...

    hibernate入门配置

    - **Update**:调用`update()`更新对象状态。 - **Delete**:调用`delete()`删除对象。 **六、Transaction管理** 1. Hibernate使用Java的`Transaction`接口进行事务管理。在开始操作数据库之前,先开始事务;操作...

    hibernate入门代码

    - Update(更新):调用update()方法更新对象状态。 - Delete(删除):delete()方法移除对象。 6. HQL(Hibernate Query Language): HQL是Hibernate提供的面向对象的查询语言,类似于SQL,但更接近Java语法。...

    1.Hibernate入门

    **标题:“Hibernate入门”** **概述:** Hibernate 是一个开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。它简化了数据库编程,允许开发者通过Java对象来操作...

    Hibernate 入门

    - 单表继承、分类表继承和多表继承三种方式。 - 实现复杂的继承关系,优化数据存储结构。 - **复合类型映射**: - **Component映射**: 将Java类的属性映射到数据库表中的列。 - **Set、List、Map映射**: 处理一...

    hibernate入门文档

    ### Hibernate入门精要 #### Hibernate概述 Hibernate是一个开放源代码的ORM(Object Relational Mapping)框架,用于Java应用中实现数据库操作。它提供了一个高级的数据持久化层,简化了对象和关系型数据库之间的...

    最经典的hibernate教程_从入门到精通(全四篇)

    5. CRUD操作:学习如何使用Hibernate进行增删查改(Create, Read, Update, Delete)操作,包括对象状态管理。 【进阶阶段】,将探讨更多高级特性: 1. 关联映射:学习一对一、一对多、多对一、多对多等各种关联关系...

Global site tag (gtag.js) - Google Analytics