在持久化周期中,不同的ORM接口实现使用不同的术语,定义不同的状态和状态转变。同时,内部状态的使用不同于外部客户端应用。Hibernate只定义了三种状态,隐藏了复杂的内部实现(客户端代码中看不到).三种状态分别是:transient, persistent, detached.
一、transient objects
1、 在Hibernate中,对象的初始化使用new 操作,但并没有立刻保存入数据库(persistent),他们的状态是transient,一旦引用对象的“指针”丢失,他们的状态也就丢失了——被垃圾回收了(这个就是他们的生命长度)。
2、Hibernate认为所有的transient状态的实例都是非事务的。修改此状态的实例不会在任何事务中进行。也就是说对于此状态对象的改变,Hibernate并没有提供回滚功能。
3、对象一旦被transient状态的对象引用,默认的此对象也是transient,即状态具有传递性。
二、persisten objects
1、持久化对象是具有数据库的关键key的是那种被session.save()方法后的对象。他和数据库管理系统关联在一起。此状态对象具有传递性,他总是与一个session相关联,总是处于事务中。
2、持久化对象在完成事务之后,他的状态应该和数据库中的状态保持一致。当一个事务提交的时候(INSERT, UPDATE, DELETE),在缓存中的状态应该传播到数据库中(也就是状态保持一致)。状态的传播也可能发生在其他时刻,比如,在执行语句的时候,Hibernate可能要与数据库同步。
3、一个持久化对象的new操作,会跟数据库的primary key值相关联,但是他并没有被插入数据库中。这个new 持久化对象一致保存这“new”特性,直到发生同步(发生一些数据库操作)。当然,在事务结束时,我们不需要人为的更新缓存中的每一个persistent对象所对应的数据库row。ORM软件必须有一种检测工具:知道哪一个persisten对象在事务中被改变了。我们称这种举措为:"自动脏检查(automatic dirty chekcing:一个对象的改变没有立刻传递到数据库中,认为:dirty)",Hibernate尽可能迟的传递这种改变信息到数据库?Hibernate还能能够检测他的属性的改变,并尽可能只更新对应的字段。但是在某种环境下他是有害的,所以,默认情况下,Hibernate对所有的columns进行了更新,如果你想要支持update modified columns,你可以使用 dynamic-update='true'(在配置文件中定义)。
4、一种persistent对象可以通过delete()方法的调用变成transient状态。
三、Detached objects
1、当一个事务结束的时候,与持久化管理关联的persistent对象仍然存在,(一旦事务提交成功,缓存中的对象状态需要跟数据库保持一致)。
2、当你close the Session,persistent对象将失去与持久化管理器关联。我们称这种对象所处的状态为detached。他意味着他们的状态不会再与数据库进行同步了。他们不在Hibernate管理中管理,但是他们仍然保存这persistent的数据信息,允许在事务的外头保留一个引用指向此对象。Hibernate允许你在一个新的事务中复用这些对象。从一个事务中返回对象到持久层并在新的一个事务中复用他们,这是Hibernate一个主要的卖点。
分享到:
相关推荐
Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...
《Hibernate学习笔记特别详细》 Hibernate,作为一款开源的Object-Relational Mapping(ORM)框架,为Java开发者提供了强大的数据库操作支持。它简化了数据库访问的复杂性,使得开发人员可以像操作对象一样操作...
使用Hibernate,开发者可以遵循一定的原则来设计持久化类,如定义get/set方法、提供默认构造器、使用集合接口类型和标识属性。此外,还需要通过Configuration类配置Hibernate,包括数据库连接信息、映射文件等。 ...
### 对象持久化与Hibernate学习笔记 #### 一、对象持久化的概念与重要性 - **定义**: 对象持久化是指将程序中的对象状态存储到持久化存储设备上的过程,以便在程序结束运行后仍然可以保留这些数据。 - **必要性**:...
9. **实体生命周期**:Hibernate定义了持久化对象的生命周期状态,包括临时态、瞬时态、持久态和脱管态,理解这些状态有助于正确处理对象。 10. **性能优化**:笔记中可能涉及查询优化、批处理、缓存策略等,以提升...
**Hibernate学习笔记与总结** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。本文将深入探讨Hibernate的核心概念、配置、实体类、映射文件、...
《马士兵Hibernate学习笔记》是一份深入浅出的教程,旨在帮助初学者掌握Hibernate这一流行的Java持久化框架。Hibernate是一个对象关系映射(ORM)工具,它允许开发者用面向对象的方式来操作数据库,从而减少了传统...
Session是Hibernate的核心接口,它是数据库会话的代理,负责对象的持久化操作。Transaction则管理事务,保证数据的一致性。理解Session的生命周期和事务管理策略对于避免并发问题至关重要。 五、CRUD操作 通过...
### Hibernate 学习笔记知识点概览 #### 一、Hibernate 概述 - **定义**:Hibernate 是一款开源的对象关系映射(ORM)框架,它实现了将 Java 应用程序中的对象模型映射到关系型数据库中的记录。通过 ORM 技术,...
**Hibernate学习笔记** Hibernate是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中操作数据库的强大工具。本笔记将深入探讨Hibernate的核心概念、配置、实体管理、查询语言以及最佳实践...
设计实体类时,应提供无参构造函数、标识属性,并为持久化字段声明访问器。主键生成策略有多种,如 uuid、native 和 assigned。 在多对一映射示例中,User 类有一个名为 group 的属性,表示用户所属的组,这在...
Hibernate作为Java领域广泛使用的持久化框架,它极大地简化了数据库操作,提高了开发效率。 笔记内容可能涵盖了以下几个关键知识点: 1. **Hibernate简介**:Hibernate是一种基于Java的开源对象关系映射(ORM)...
这部分内容会讲解如何在Struts基础上整合Hibernate,实现数据持久化。 11. **性能优化** 优化是任何系统开发中的重要环节,对于Hibernate而言,可能涉及到缓存策略、批处理、延迟加载等方面的调整,以提高系统的...
本学习笔记将深入探讨Hibernate的核心概念、配置、使用方法以及主要接口。 001---Hibernate简介 Hibernate是一个开源的ORM框架,它通过提供对象和数据库表之间的映射,实现了数据层与业务层的解耦。ORM的主要目标是...
Hibernate 是基于 Java 的持久化框架,它将对象模型与关系数据库模型进行映射,实现了对象与数据库之间的透明交互。通过 Hibernate,开发者可以使用 Java 对象直接操作数据库,而无需手动编写 SQL 语句。 2. **...
### Hibernate 学习笔记知识点详解 #### 一、Hibernate 简介 - **概念**:Hibernate 是一种“对象/关系映射”(Object/Relational Mapping,简称 ORM)技术,用于解决 Java 应用程序与关系型数据库交互的问题。 - *...
### JDBC与Hibernate学习笔记 #### 一、JDBC概述 **1.1 ODBC与JDBC的区别** - **ODBC(Open Database Connectivity)**: 开放式数据库连接是一种开放标准的应用程序接口(API),用于实现数据库应用程序与不同...
《马士兵Hibernate学习笔记》是一份详尽的教程,涵盖了Hibernate框架的核心概念和技术要点。Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,它有效地解决了Java应用程序与数据库之间的数据交互问题,...