`
hzgcy
  • 浏览: 1599 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

翻译的Hibernate的Session的javadoc

阅读更多
原文:http://blog.163.com/wwq101693/blog/static/80642726200962372039497/

翻译的Hibernate的Session的javadoc

Hibernate   2009-07-23 07:20   阅读4   评论0   字号: 大大  中中  小小 Hibernate的透明持久化用起来非常舒服,有时甚至忘记了数据库的存在。我身边的朋友经常会分不清save、saveOrUpdate、update的区别,lock、merge、replicate、refresh、evict甚至不知道是干什么用的。而且关于实体对象的生命周期也有很多概念不清,分不清transient、persistent、detached的区别,只是知道PO、VO这样的通俗叫法。其实这些概念都很简单,Hibernate的javadoc写的都很清楚,只需看看就能明白。所以我花了些时间将Hibernate 3.1.2中session的javadoc部分翻译了一下,旨在让那些因为Hibernate的“透明”而忘记了它基本概念的人们停下来再看看这些概念


--------------------------------------------------------------------------------

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

--------------------------------------------------------------------------------

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

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

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

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

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

save()和persist()将会引发SQL的INSERT,delete()会引发SQLDELETE,而update()或merge()会引发SQLUPDATE。对持久化(persistent)实例的修改在刷新提交的时候会被检测到,它也会引起SQLUPDATE。saveOrUpdate()或者replicate()会引发SQLINSERT或者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的内部状态可能会与数据库失去同步。




Author:
Gavin King
See Also:
DE>SessionFactoryDE>

--------------------------------------------------------------------------------


Method Summary
DE> TransactionDE> DE>beginTransaction()DE>
          开始一个工作单元并且返回相关联的事务(Transaction)对象。 
DE> voidDE> DE>cancelQuery()DE>
          终止执行当前查询。
DE> voidDE> DE>clear()DE>
          完整的清除这个session。
DE> ConnectionDE> DE>close()DE>
          停止这个Session,通过中断JDBC连接并且清空(cleaning up)它。
DE> ConnectionDE> DE>connection()DE>
          获取这个Session的JDBC连接。

如果这个session使用了积极的collection释放策略(如CMT-容器控制事务的环境下),关闭这个调用的连接的职责应该由当前应用程序负责。 
DE> booleanDE> DE>contains(Object object)DE>
          检查这个对象实例是否与当前的Session关联(即是否为Persistent状态)。
DE> CriteriaDE> DE>createCriteria(Class persistentClass)DE>
          为给定的实体类或它的超类创建一个新的Criteria实例。
DE> CriteriaDE> DE>createCriteria(Class persistentClass, String alias)DE>
          根据给定的实体类或者它的超类创建一个新的Criteria实例,并赋予它(实体类)一个别名。
DE> CriteriaDE> DE>createCriteria(String entityName)DE>
          根据给定的实体的名称(name),创建一个新的Criteria实例。
DE> CriteriaDE> DE>createCriteria(String entityName, String alias)DE>
          根据给定的实体的名称(name),创建一个新的Criteria实例,并赋予它(实体类)一个别名
DE> QueryDE> DE>createFilter(Object collection, String queryString)DE>
          根据给定的collection和过滤字符串(查询条件)创建一个新的Query实例。
DE> QueryDE> DE>createQuery(String queryString)DE>
          根据给定的HQL查询条件创建一个新的Query实例。
DE> SQLQueryDE> DE>createSQLQuery(String queryString)DE>
          根据给定的SQL查询条件创建一个新的SQLQuery实例。
DE> voidDE> DE>delete(Object object)DE>
          从数据库中移除持久化(persistent)对象的实例。
DE> voidDE> DE>delete(String entityName, Object object)DE>
          从数据库中移除持久化(persistent)对象的实例。
DE> voidDE> DE>disableFilter(String filterName)DE>
          禁用当前session的名称过滤器。
DE> ConnectionDE> DE>disconnect()DE>
          断开Session与当前的JDBC连接。
DE> FilterDE> DE>enableFilter(String filterName)DE>
          打开当前session的名称过滤器。
DE> voidDE> DE>evict(Object object)DE>
          将当前对象实例从session缓存中清除。
DE> voidDE> DE>flush()DE>
          强制提交清理(flush)Session。
DE> ObjectDE> DE>get(Class clazz, Serializable id)DE>
          根据给定标识和实体类返回持久化对象的实例,如果没有符合条件的持久化对象实例则返回null。
DE> ObjectDE> DE>get(Class clazz, Serializable id, LockMode lockMode)DE>
          根据给定标识和实体类返回持久化对象的实例,如果没有符合条件的持久化对象实例则返回null。
DE> ObjectDE> DE>get(String entityName, Serializable id)DE>
          返回与给定的实体命名和标识匹配的持久化实例,如果没有对应的持久化实例则返回null。
DE> ObjectDE> DE>get(String entityName, Serializable id, LockMode lockMode)DE>
          返回与给定的实体类和标识所匹配的持久化实例,如果没有对应的持久化实例则返回null。
DE> CacheModeDE> DE>getCacheMode()DE>
          得到当前的缓存模式。
DE> LockModeDE> DE>getCurrentLockMode(Object object)DE>
          检测给定对象当前的锁定级别。
DE> FilterDE> DE>getEnabledFilter(String filterName)DE>
          根据名称获取一个当前允许的过滤器(filter)。
DE> EntityModeDE> DE>getEntityMode()DE>
          获取这个session有效的实体模式。
DE> StringDE> DE>getEntityName(Object object)DE>
          返回一个持久化对象的实体名称。
DE> FlushModeDE> DE>getFlushMode()DE>
          获得当前的刷新提交(flush)模式。
DE> SerializableDE> DE>getIdentifier(Object object)DE>
          获取给定的实体对象实例在Session的缓存中的标识,如果该实例是自由状态(Transient)的或者与其它Session关联则抛出一个异常。
DE> QueryDE> DE>getNamedQuery(String queryName)DE>
          从映射文件中根据给定的查询的名称字符串获取一个Query(查询)实例。
DE> SessionDE> DE>getSession(EntityMode entityMode)DE>
          根据给定的实体模式(Entity Mode)开始一个新的有效的Session。
DE> SessionFactoryDE> DE>getSessionFactory()DE>
          获取创建这个session的SessionFactory实例。 
DE> SessionStatisticsDE> DE>getStatistics()DE>
          获取这个session的统计信息。
DE> TransactionDE> DE>getTransaction()DE>
          获取与这个session关联的Transaction(事务)实例。 instance associated with this session.
DE> booleanDE> DE>isConnected()DE>
          检查当前Session是否处于连接状态。
DE> booleanDE> DE>isDirty()DE>
          当前Session是否包含需要与数据库同步的(数据状态)变化 ?如果我们刷新提交(flush)这个session是否会有SQL执行?
DE> booleanDE> DE>isOpen()DE>
          检查当前Session是否仍然打开。
DE> ObjectDE> DE>load(Class theClass, Serializable id)DE>
          在符合条件的实例存在的情况下,根据给定的实体类和标识返回持久化状态的实例。
DE> ObjectDE> DE>load(Class theClass, Serializable id, LockMode lockMode)DE>
          在符合条件的实例存在的情况下,根据给定的实体类、标识及指定的锁定等级返回持久化状态的实例。
DE> voidDE> DE>load(Object object, Serializable id)DE>
          将与给定的标示对应的持久化状态(值)复制到给定的自由状态(trasient)实例上。
DE> ObjectDE> DE>load(String entityName, Serializable id)DE>
          在符合条件的实例存在的情况下,根据给定的实体类和标识返回持久化状态的实例。
DE> ObjectDE> DE>load(String entityName, Serializable id, LockMode lockMode)DE>
          在符合条件的实例存在的情况下,根据给定的实体类、标识及指定的锁定等级返回持久化状态的实例。
DE> voidDE> DE>lock(Object object, LockMode lockMode)DE>
          从给定的对象上获取指定的锁定级别。
DE> voidDE> DE>lock(String entityName, Object object, LockMode lockMode)DE>
          从给定的对象上获取指定的锁定级别。
DE> ObjectDE> DE>merge(Object object)DE>
          将给定的对象的状态复制到具有相同标识的持久化对象上。
DE> ObjectDE> DE>merge(String entityName, Object object)DE>
          将给定的对象的状态复制到具有相同标识的持久化对象上。
DE> voidDE> DE>persist(Object object)DE>
          将一个自由状态(transient)的实例持久化。
DE> voidDE> DE>persist(String entityName, Object object)DE>
          将一个自由状态(transient)的实例持久化。
DE> voidDE> DE>reconnect()DE>
          不推荐的。 手工的重新连接只应用于应用程序提供连接的情况,在这种情况下或许应该使用DE>reconnect(java.sql.Connection)DE>。
DE> voidDE> DE>reconnect(Connection connection)DE>
          重新连接到给定的JDBC连接。
DE> voidDE> DE>refresh(Object object)DE>
          从数据库中重新读取给定实例的状态。
DE> voidDE> DE>refresh(Object object, LockMode lockMode)DE>
          根据指定的锁定模式(LockMode),从数据库中重新读取给定实例的状态。
DE> voidDE> DE>replicate(Object object, ReplicationMode replicationMode)DE>
          使用当前的标识值持久化给定的游离状态(Transient)的实体。
DE> voidDE> DE>replicate(String entityName, Object object, ReplicationMode replicationMode)DE>
          使用当前的标识值持久化给定的游离状态(Transient)的实体。
DE> SerializableDE> DE>save(Object object)DE>
          首先为给定的自由状态(Transient)的对象(根据配置)生成一个标识并赋值,然后将其持久化。
DE> SerializableDE> DE>save(String entityName, Object object)DE>
          首先为给定的自由状态(Transient)的对象(根据配置)生成一个标识并赋值,然后将其持久化。
DE> voidDE> DE>saveOrUpdate(Object object)DE>
          根据给定的实例的标识属性的值(注:可以指定unsaved-value。一般默认null。)来决定执行 save() 或update()操作。
DE> voidDE> DE>saveOrUpdate(String entityName, Object object)DE>
          根据给定的实例的标识属性的值(注:可以指定unsaved-value。一般默认null。)来决定执行 save() 或update()操作。
DE> voidDE> DE>setCacheMode(CacheMode cacheMode)DE>
          设置刷新提交模式。
DE> voidDE> DE>setFlushMode(FlushMode flushMode)DE>
          设置刷新提交模式。
DE> voidDE> DE>setReadOnly(Object entity, boolean readOnly)DE>
          将一个未经更改的持久化对象设置为只读模式,或者将一个只读对象标记为可以修改的模式。
DE> voidDE> DE>update(Object object)DE>
          根据给定的detached(游离状态)对象实例的标识更新对应的持久化实例。
DE> voidDE> DE>update(String entityName, Object object)DE>
          根据给定的detached(游离状态)对象实例的标识更新对应的持久化实例。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics