Hibernate Session中文Javadoc

本文深入探讨Hibernate Session接口的功能和作用,包括数据增删改查、数据库连接、事务管理等核心操作。解释了Session的生命周期及其与持久化状态的关系,并提供了典型事务处理的示例。

Hibernate早已成为java社区ORM的事实标准,使用者众多。在Hibernate中,数据的增删改查以及数据库连接、事务等都是通过Session接口来操作,因此可以认为Session是整个Hibernate的中心枢纽。使用Hibernate时间久了,有时候都忘了程序是怎么跟数据库进行交互的了,这可不应该,趁最近有时间,得赶紧温习一下。

先从翻译Hibernate Session的Javadoc开始。

org.hibernate  
Interface Session  
All Superinterfaces:  Serializable  ,   SharedSessionContract 
All Known Subinterfaces:  EventSource 
All Known Implementing Classes:  SessionDelegatorBaseImpl  ,   SessionImpl

public interface Session extends SharedSessionContract

Java应用程序与Hibernate之间的主要运行时接口。它是抽象了持久化服务概念的核心抽象API类。

Session的生命周期绑定在一个物理的事务(tansaction)上面。(长的事务可能跨越多个数据库事物。)

Session的主要功能是提供对映射的实体类实例的创建,读取和删除操作。实例可能以下面三种状态存在:

  • 自由状态(transient): 不曾进行持久化,未与任何Session相关联
  • 持久化状态(persistent): 仅与一个Session相关联
  • 游离状态(detached): 已经进行过持久化,但当前未与任何Session相关联

游离状态的实例可以通过调用 save()、persist() 或者 saveOrUpdate ()方法进行持久化。持久化实例可以通过调用 delete() 变成游离状态。通过 get() 或 load() 方法得到的实例都是持久化状态的。游离状态的实例可以通过调用 update()、saveOrUpdate()、lock()或者replicate() 进行持久化。游离或者自由状态下的实例可以通过调用 merge() 方法成为一个新的持久化实例。

save() 和 persist() 将会引发SQL的INSERT, delete() 会引发SQL的DELETE,而update() 或 merge() 会引发SQL的UPDATE。对持久化(persistent)实例的修改在刷新提交的时候会被检测到,它也会引起SQL的UPDATE。 saveOrUpdate() 或者replicate() 会引发SQL的INSERT或者UPDATE。

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

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

一个典型的事务应该使用下面的形式:

Session sess = factory.openSession();
Transaction tx;
try {
 tx = sess.beginTransaction();
 //do some work
 ...
 tx.commit();
}
catch (Exception e) {
 if (tx!=null) tx.rollback();
 throw e;
}
finally {
 sess.close();
}

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

See Also: SessionFactory

Nested Class Summary
static interfaceSession.LockRequest 
          包含锁定的细节(LockMode、超时和范围)
Method Summary
Session.LockRequestbuildLockRequest LockOptions lockOptions) 
          使用指定的LockMode,悲观锁超时时间和锁定范围构建一个LockRequest
IdentifierLoadAccessbyId Class entityClass) 
          创建一个IdentifierLoadAccess实例以根据主键检索指定的实体
IdentifierLoadAccessbyId String entityName) 
          创建一个IdentifierLoadAccess实例以根据主键检索指定的实体
NaturalIdLoadAccessbyNaturalId Class entityClass) 
          创建一个NaturalIdLoadAccess实例以通过其自然id检索指定的实体
NaturalIdLoadAccessbyNaturalId String entityName) 
          创建一个NaturalIdLoadAccess实例以通过其自然id检索指定的实体
SimpleNaturalIdLoadAccessbySimpleNaturalId Class entityClass) 
          创建一个SimpleNaturalIdLoadAccess实例以通过其简单的(单属性)自然id检索指定的实体
SimpleNaturalIdLoadAccessbySimpleNaturalId String entityName) 
          创建一个NaturalIdLoadAccess实例以通过其自然id检索指定的实体
voidcancelQuery () 
          终止执行当前查询
voidclear () 
          完全清除当前会话(Session)
Connectionclose () 
          停止这个Session,通过中断JDBC连接并且清空(cleaning up)它
booleancontains Object object) 
          检查这个对象实例是否与当前的Session关联(即是否为Persistent状态)
QuerycreateFilter Object collection,  StringqueryString) 
           根据给定的collection和过滤字符串(查询条件)创建一个新的Query实例
voiddelete Object object) 
           从数据库中移除持久化(persistent)对象的实例
voiddelete String entityName, Object object) 
           从数据库中移除持久化(persistent)对象的实例
voiddisableFetchProfile String name) 
           禁止在这个会话中获取特定配置文件
voiddisableFilter String filterName) 
           禁用当前session的名称过滤器
Connectiondisconnect () 
            断开Session与当前的JDBC连接
<T> T
doReturningWork ReturningWork <T> work) 
           控制器允许用户使用当前Session管理的连接执行JDBC相关工作
voiddoWork Work work) 
           控制器允许用户使用当前Session管理的连接执行JDBC相关工作
voidenableFetchProfile String name) 
           允许在这个会话中获取特定配置文件
FilterenableFilter String filterName) 
           允许在当前Session中使用名称过滤器
voidevict Object object) 
           将当前对象实例从session缓存中清除
voidflush () 
           强制提交清理(flush)Session
Objectget Class clazz,    Serializable id) 
           根据给定标识和实体类返回持久化对象的实例,如果没有符合条件的持久化对象实例则返回null
Objectget Class clazz,    Serializable id,    LockModelockMode) 
           过期的方法: 根据给定标识和实体类返回持久化对象的实例,如果没有符合条件的持久化对象实例则返回null
Objectget Class clazz,    Serializable id,   LockOptions lockOptions) 
           根据给定的主键标示符返回给定的实体类的持久化实例,如果没有这样的持久实例返回null
Objectget String entityName,    Serializable id) 
           返回与给定的实体命名和标识匹配的持久化实例,如果没有对应的持久化实例则返回null
Objectget String entityName,    Serializable id,   LockMode lockMode) 
             过期的方法 : 返回与给定的实体类和标识所匹配的持久化实例,如果没有对应的持久化实例则返回null
Objectget String entityName,    Serializable id,   LockOptions lockOptions) 
           根据给定的主键标示符返回给定的实体类的持久化实例,如果没有这样的持久实例返回null
CacheModegetCacheMode () 
           根据给定的主键标示符返回给定的实体类的持久化实例,如果没有这样的持久实例返回null
LockModegetCurrentLockMode Object object) 
           检测给定对象当前的锁定级别
FiltergetEnabledFilter String filterName) 
           根据名称获取一个当前允许的过滤器(filter)
StringgetEntityName Object object) 
           返回一个持久化对象的实体名称
FlushModegetFlushMode () 
           获得当前的刷新提交(flush)模式
SerializablegetIdentifier Object object) 
           获取给定的实体对象实例在Session的缓存中的标识,如果该实例是自由状态(Transient)的或者与其它Session关联则抛出一个异常
LobHelpergetLobHelper () 
           检索当前会话中创建LOB实例的helper/delegate
SessionFactorygetSessionFactory () 
           获取创建这个session的SessionFactory实例
SessionStatisticsgetStatistics () 
           获取这个session的统计信息
TypeHelpergetTypeHelper () 
           方便的访问与当前会话的SessionFactory相关的TypeHelper
booleanisConnected () 
           检查当前Session是否处于连接状态
booleanisDefaultReadOnly () 
           默认是否以只读模式加载实体/代理对象
booleanisDirty () 
           当前Session是否包含需要与数据库同步的(数据状态)变化 ?如果我们刷新提交(flush)这个session是否会有SQL执行?
booleanisFetchProfileEnabled String name) 
           在当前Session中是否允许获取特定配置
booleanisOpen () 
           检查当前Session是否仍然打开
booleanisReadOnly Object entityOrProxy) 
           指定的实体或代理对象是否制只读
Objectload Class theClass, Serializable id) 
           在符合条件的实例存在的情况下,根据给定的实体类和标识返回持久化状态的实例
Objectload Class theClass, Serializable id, LockModelockMode) 
           过期的方法: 在符合条件的实例存在的情况下,根据给定的实体类、标识及指定的锁定等级返回持久化状态的实例
Objectload Class theClass, Serializable id,LockOptions lockOptions) 
           在符合条件的实例存在的情况下,根据给定的实体类、标识及指定的锁定等级返回持久化状态的实例
voidload Object object, Serializable id) 
           将与给定的标示对应的持久化状态(值)复制到给定的自由状态(trasient)实例上
Objectload String entityName,  Serializable id) 
           在符合条件的实例存在的情况下,根据给定的实体类和标识返回持久化状态的实例
Objectload String entityName, Serializable id, LockMode lockMode) 
           过期的方法: 在符合条件的实例存在的情况下,根据给定的实体类、标识及指定的锁定等级返回持久化状态的实例
Objectload String entityName,  Serializable id, LockOptions lockOptions) 
           在符合条件的实例存在的情况下,根据给定的实体类、标识及指定的锁定等级返回持久化状态的实例
voidlock Object object, LockMode lockMode) 
           过期的方法: 从给定的对象上获取指定的锁定级别
voidlock String entityName,  Object object, LockMode lockMode) 
           过期的方法   从给定的 对象上获取 指定的锁定级别
Objectmerge Object object) 
           将给定的对象的状态复制到具有相同标识的持久化对象上
Objectmerge String entityName,  Object object) 
           将给定的对象的状态复制到具有相同标识的持久化对象上
voidpersist Object object) 
           将一个自由状态(transient)的实例持久化
voidpersist String entityName,  Object object) 
           将一个自由状态(transient)的实例持久化
voidreconnect Connection connection) 
           重新连接到给定的JDBC连接
voidrefresh Object object) 
           从数据库中重新读取给定实例
voidrefresh Object object, LockMode lockMode) 
           过期方法: 根据指定的锁定模式(LockMode),从数据库中重新读取给定实例的状态
voidrefresh Object object, LockOptionslockOptions) 
           根据指定的锁定模式(LockMode),从数据库中重新读取给定实例的状态
voidrefresh String entityName, Object object) 
           从底层数据库中从新读取给定实例
voidrefresh String entityName, Object object,LockOptions lockOptions) 
           根据给定的锁定模式从数据库中重新读取给定实例
voidreplicate Object object,   ReplicationModereplicationMode) 
           使用当前的标识值持久化给定的游离状态(Transient)的实体
voidreplicate String entityName, Object object,ReplicationMode replicationMode) 
           使用当前的标识值持久化给定的游离状态(Transient)的实体
Serializablesave Object object) 
           首先为给定的自由状态(Transient)的对象(根据配置)生成一个标识并赋值,然后将其持久化
Serializablesave String entityName, Object object) 
           首先为给定的自由状态(Transient)的对象(根据配置)生成一个标识并赋值,然后将其持久化
voidsaveOrUpdate Object object) 
           根据给定的实例的标识属性的值(注:可以指定unsaved-value。一般默认null。)来决定执行save() 或update()操作
voidsaveOrUpdate String entityName, Objectobject) 
           根据给定的实例的标识属性的值(注:可以指定unsaved-value。一般默认null。)来决定执行save() 或update()操作
SharedSessionBuildersessionWithOptions () 
           获得一个有能力从当前会话中抓住某些信息的会话创建者
voidsetCacheMode CacheMode cacheMode) 
           设置缓存模式
voidsetDefaultReadOnly (boolean readOnly) 
           设置是否默认以只读模式加载实体/代理对象到当前会话中
voidsetFlushMode FlushMode flushMode) 
           设置刷新提交模式
voidsetReadOnly Object entityOrProxy, boolean readOnly) 
           将一个未经更改的持久化对象设置为只读模式,或者将一个只读对象标记为可以修改的模式
voidupdate Object object) 
           根据给定的detached(游离状态)对象实例的标识更新对应的持久化实例
voidupdate String entityName, Object object) 
           根据给定的detached(游离状态)对象实例的标识更新对应的持久化实例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值