Hibernate 对象的三种状态 transient persistent detached

Hibernate对象状态 
临时(Transient) - 由new操作符创建,且尚未与Hibernate Session 关联的对象被认定为临时(Transient)的。临时(Transient)对象不会被持久化到数据库中,也不会被赋予持久化标识(identifier)。 如果临时(Transient)对象在程序中没有被引用,它会被垃圾回收器(garbage collector)销毁。 使用Hibernate Session可以将其变为持久(Persistent)状态。(Hibernate会自动执行必要的SQL语句) 

持久(Persistent) - 持久(Persistent)的实例在数据库中有对应的记录,并拥有一个持久化标识(identifier)。 持久(Persistent)的实例可能是刚被保存的,或刚被加载的,无论哪一种,按定义,它存在于相关联的Session作用范围内。 Hibernate会检测到处于持久(Persistent)状态的对象的任何改动,在当前操作单元(unit of work)执行完毕时将对象数据(state)与数据库同步(synchronize)。 开发者不需要手动执行UPDATE。将对象从持久(Persistent)状态变成瞬时(Transient)状态同样也不需要手动执行DELETE语句。 

游离(Detached) - 与持久(Persistent)对象关联的Session被关闭后,对象就变为游离(Detached)的。 对游离(Detached)对象的引用依然有效,对象可继续被修改。游离(Detached)对象如果重新关联到某个新的Session上, 会再次转变为持久(Persistent)的(在Detached其间的改动将被持久化到数据库)。 这个功能使得一种编程模型,即中间会给用户思考时间(user think-time)的长时间运行的操作单元(unit of work)的编程模型成为可能。 我们称之为应用程序事务,即从用户观点看是一个操作单元(unit of work)。

Hibernate中对象的游离状态是指Session关闭之后,持久化对象变成离线对象,离线对象就不能同数据库同步,也不再受Hibernate管理。操作 处于游离态对象 经常会报 session已关闭的错误。

推荐文章

方法动态加载java类文件

方法动态加载java类文件

推荐文章

CPU密集型线程智慧

CPU密集型线程智慧

推荐文章

GNU make是否有依赖于其他makefile中目标的竞争的目标?

GNU make是否有依赖于其他makefile中目标的竞争的目标?

推荐文章

不使用sd卡从另一个android应用程序安装apk

不使用sd卡从另一个android应用程序安装apk

推荐文章

在PHP中,如何确定日期是否介于两个日期之间?

在PHP中,如何确定日期是否介于两个日期之间?

推荐文章

在数据绑定详细信息视图中使用子实体集

在数据绑定详细信息视图中使用子实体集

推荐文章

在iPhone上验证URL

在iPhone上验证URL

推荐文章

无法在HSQLDB中删除表

无法在HSQLDB中删除表

推荐文章

使用客户端登录访问google任务时出现问题

使用客户端登录访问google任务时出现问题

推荐文章

Swing:有没有一种简单的方法可以让1个组件忽略布局管理器?

Swing:有没有一种简单的方法可以让1个组件忽略布局管理器?

推荐文章

jQuery移动滑块:如何使用自定义比例?

jQuery移动滑块:如何使用自定义比例?

推荐文章

将字符串转换为字节列表

将字符串转换为字节列表

推荐文章

如何以及何时在CFHTTP标记中使用ClientCert?

如何以及何时在CFHTTP标记中使用ClientCert?

推荐文章

我可以不通过Chrome应用商店创建一个可安装的googlechrome web应用吗?

我可以不通过Chrome应用商店创建一个可安装的googlechrome web应用吗?

推荐文章

EAD中的表格分拣机图标

EAD中的表格分拣机图标

推荐文章

在现有处理程序之前追加我的事件处理程序

在现有处理程序之前追加我的事件处理程序