Hibernate的游离状态

开发 后端
本文介绍Hibernate的三个状态,此为第一部分。Java应用程序与Hibernate之间的主要运行时接口。它是抽象了持久化服务概念的核心抽象API类。

Java应用程序与Hibernate之间的主要运行时接口。它是抽象了持久化服务概念的核心抽象API类。
Session的生命周期绑定在一个物理的事务(tansaction)上面。(长的事务可能跨越多个数据库事物。)

Session的主要功能是提供对映射的实体类实例的创建,读取和删除操作。
实例可能以下面三种状态存在:
◆自由状态(transient): 不曾进行持久化,未与任何Session相关联
◆持久化状态(persistent): 仅与一个Session相关联
◆游离状态(detached): 已经进行过持久化,但当前未与任何Session相关联

游离状态的实例可以通过调用update(),lock(),replicate(),save(),persist()或者saveOrUpdate()方法进行持久化。持久化实例可以通过调用 delete()变成游离状态。通过get()或load()方法得到的实例都是持久化状态的。游离或者自由状态下的实例可以通过调用merge()方法成为一个新的持久化实例。
save()和persist()将会引发SQL的INSERT,delete()会引发SQLDELETE,而update()或merge()会引发SQLUPDATE。对持久化(persistent)实例的修改在刷新提交的时候会被检测到,它也会引起SQLUPDATE。saveOrUpdate()或者replicate()会引发SQLINSERT或者UPDATE。

其具体实现并不一定是线程安全的。每个线程/事务应该从一个SessionFactory获取自己的session实例。

如果其持久化对象类是可序列化的,则Session实例也是可序列化的。

一个典型的事务应该使用下面的形式:Session sess = factory.openSession();

  1. Transaction tx;  
  2. try {  
  3. tx = sess.beginTransaction();  
  4. //do some work  
  5. ...  
  6. tx.commit();  
  7. }  
  8. catch (Exception e) {  
  9. if (tx!=null) tx.rollback();  
  10. throw e;  
  11. }  
  12. finally {  
  13. sess.close();  

如果Session抛出了异常, 事务必须回滚而session会被废弃。在异常发生后Session的内部状态可能会与数据库失去同步

【编辑推荐】

  1. Hibernate基础(2)
  2. 扩展hibernate的查询
  3. 简单的Hibernate入门介绍
  4. 在Liferay中使用Hibernate
  5. Hibernate模糊查询参数化的问题
责任编辑:book05 来源: 百度博客
相关推荐

2009-06-03 09:11:03

Hibernate工作原理体系结构

2009-06-17 15:06:50

Hibernate实体

2009-09-28 11:30:53

Hibernate核心

2009-07-02 09:28:07

Hibernate三种

2009-09-25 15:58:04

Hibernate对象

2009-06-26 10:10:00

Hibernate状态

2009-09-24 16:22:50

Hibernate自动

2009-06-26 10:07:00

Hibernate状态

2009-07-02 09:38:17

Hibernate延时

2009-09-23 17:00:07

Hibernate持久

2009-06-18 11:43:40

Hibernate uHibernate s

2009-06-26 16:33:09

saveOrUpdatHibernate

2009-06-26 10:01:00

Hibernate的查

2012-02-03 11:31:33

HibernateJava

2009-06-06 15:37:22

Hibernate性能

2009-07-02 09:40:14

Hibernate的继

2012-02-03 11:17:33

HibernateJava

2009-09-25 09:04:27

Hibernate类型

2012-02-08 14:24:35

HibernateJava

2009-06-17 16:08:58

Hibernate C
点赞
收藏

51CTO技术栈公众号