【转】Hibernate Object States

  Hibernate是一种对象/关系映射的持久化框架,它做的主要工作之一就是对象和数据库表记录之间的状态管理。Hibernate编程环境中操作的对象指的是Entity POJO对象,它存在四种状态:Transient, Persistent, Detached和Removed。下面是从网上摘录的一幅图(源自Java Persistence with Hibernate这本书),非常好地说明了这几种状态之间的转换关系。

这状态变化描述的是数据库与映射对象之间的关系,也就是一条数据的状态变化。

从这幅图中,我们可以看到,

  • 对象刚刚创建时是Transient(瞬时)状态,意味着和数据库没有任何关系,只在内存中存在
  • 对象在保存或更新之后,进入Persistent(持久化)状态,此时数据库中已经有对象相应的记录,并生成了ID
  • 当调用Session的clear等方法后,对象从Persistent进入Detached状态,此时Hibernate从缓存中将此对象清除,但在数据库中依然存在
  • Detached状态和Persistent状态可以相互转换,如图所示,如果保存更新对象,对象又从Detached状态进入Persistent状态
  • 也可以通过load或get方法从数据库中获取该对象,从而直接进入Persistent状态
  • 最后,调用Session的delete方法,对象就进入了不可逆转的Removed状态

其实,这些状态变化还是比较符合常理的,所以只要了解基本原理,然后就可以写写代码验证即可。

来源:http://ju.outofmemory.cn/entry/104975

时间: 2024-08-08 05:38:23

【转】Hibernate Object States的相关文章

三大框架常遇的错误:hibernate : object references an unsaved transient instance

hibernate : object references an unsaved transient instance 该错误是操作顺序的问题,例如: save或update顺序问题---比如学生表和班级表..学生表里有班级ID的外键.一对多的关系.你save的时候应该先save班级,再save学生..否则学生的外键没有对应的值,引发异常.

Hibernate配置

Ⅰ.Hibernate配置前提工作(E:\):    (一).解压4个工具包         工具如下:apache-ant-1.6.2-bin.zip      →→     apache-ant-1.6.2                   hibernate-2.1.2.zip                       →→     hibernate-2.1                   hibernate-extensions-2.1.3.zip     →→     hib

学习hibernate hibernate入门程序

In this tutorial you will see how to persist the java objects using the Hibernate Object/Relational Mapping (ORM) framework. Hibernate automates ORM and considerably reduces the number of lines of code needed to persist the object in the database. Th

[JavaEE] Hibernate OGM

Hibernate Object/Grid Mapper (OGM)这个项目能够为NoSQL数据库提供Java Persistence(JPA)支持.它复用了Hibernate Core引擎将实体持久化至NoSQL数据存储中,而不是关系型数据库中.它还复用了Java Persistence Query Language(JP-QL)来搜索数据.这个项目现在还处于初期阶段,但随着时间的推移它的功能将逐渐增强.短期目标是: 1.支持Infinispan (已实现) 2.支持Hibernate Sea

Class loading in JBoss AS 7--官方文档

Class loading in AS7 is considerably different to previous versions of JBoss AS. Class loading is based on the JBoss Modules project. Instead of the more familiar hierarchical class loading environment, AS7's class loading is based on modules that ha

Java面试题速查手册

Java类equals抽象类类型StringIntegershort多线程概念锁synchronized线程创建及状态线程通讯线程安全ThreadLocalatomicvolatile终止线程反射什么是反射?序列化什么是 java 序列化?什么情况下需要序列化?Spring组件IOC依赖注入作用域事务拦截器MVCJAVA WEBservlet异常介绍网络HTTPORMMybatisJVM布局垃圾回收集合CollectionMapListSetIONIOMQRabbitMQDUBBO秒杀 toc

什么是序列化

序列化 就是将对象的状态话信息转换成可以传输或者存储的形式的过程: 序列化需要继承Serialization接口: 简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来. 虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化. 序列化的目的: 1.以某种存储的形式使自定义对象持久化: 2.将对象从一个地方传到另一个地方: 3.使程序更具有维护性. 什么情况下需要序列化: 当你想要把内存

bijie

File类只用于表示文件(目录)的信息(名称.大小等),丌能对文件的内容进行访问.File f=new File(".");System.out.println(f.getCanonicalPath());f.getCanonicalPath()---获取当前路径 创件一个新的文件File d=new File(f,"demo");if(!d.exists()){d.mkdir();} 创件新的文件对象File text=new File(d,"text&

java.io.Serializable

Java API中java.io.Serializable接口源码: 1 public interface Serializable { 2 } 类通过实现java.io.Serializable接口可以启用其序列化功能.未实现次接口的类无法使其任何状态序列化或反序列化.可序列化类的所有子类型本身都是可序列化的.序列化接口没有方法或字段,仅用于标识可序列化的语义. Java的"对象序列化"能让你将一个实现了Serializable接口的对象转换成byte流,这样日后要用这个对象时候,你