Java应用E序与Hibernate之间的主要运行时接口。它是抽象了持久化服务概늚核心抽象APIcR?br />
Session的生命周期绑定在一个物理的事务QtansactionQ上面。(长的事务可能跨越多个数据库事物。)
Session的主要功能是提供Ҏ的实体cd例的创徏Q读取和删除操作。实例可能以下面三种状态存在:
自由状态(transientQ? 不曾q行持久化,未与MSession相关?br />持久化状态(persistentQ? 仅与一?tt>Session相关?br />游离状态(detachedQ? 已经q行q持久化Q但当前未与MSession相关?br />
游离状态的实例可以通过调用save()?tt>persist()或?tt>saveOrUpdate()Ҏq行持久化。持久化实例可以通过调用 delete()变成游离状态。通过get()?tt>load()Ҏ得到的实例都是持久化状态的。游ȝ态的实例可以通过调用 update()?saveOrUpdate()?tt>lock()或?tt>replicate()q行持久化。游L者自q态下的实例可以通过调用merge()Ҏ成ؓ一个新的持久化实例?br />
save()?tt>persist()会引发SQL?tt>INSERTQ?tt>delete()会引发SQLDELETEQ?tt>update()?tt>merge()会引发SQLUPDATE。对持久化(persistentQ?/i>实例的修改在h提交的时候会被检到Q它也会引vSQLUPDATE?tt>saveOrUpdate()或?tt>replicate()会引发SQLINSERT或?tt>UPDATE?br />
其具体实现ƈ不一定是U程安全的。每个线E?事务应该从一?tt>SessionFactory获取自己的session实例?br />
如果其持久化对象cL可序列化的,?tt>Session实例也是可序列化的?br />
一个典型的事务应该使用下面的Ş式:
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(); }
SessionFactory
Method Summary | |
Transaction | beginTransaction() 开始一个工作单元ƈ且返回相兌?tt>事务QTransactionQ?/tt>对象? |
void | cancelQuery() l止执行当前查询?/td> |
void | clear() 完整的清除这个session?/td> |
Connection | close() 停止q个SessionQ通过中断JDBCq接q且清空Qcleaning upQ它?/td> |
Connection | connection() 获取q个Session的JDBCq接?br /> 如果q个session使用了积极的collection释放{略Q如CMT-容器控制事务的环境下Q,关闭q个调用的连接的职责应该由当前应用程序负责? |
boolean | contains(Object object) 查这个对象实例是否与当前?tt>Session兌Q即是否为Persistent状态)?/td> |
Criteria | createCriteria(Class persistentClass) 为给定的实体cL它的类创徏一个新?tt>Criteria实例?/td> |
Criteria | createCriteria(Class persistentClass, String alias) Ҏl定的实体类或者它的超cdZ个新?tt>Criteria实例Qƈ赋予它(实体c)一个别名?/td> |
Criteria | createCriteria(String entityName) Ҏl定的实体的名称QnameQ,创徏一个新?tt>Criteria实例?/td> |
Criteria | createCriteria(String entityName, String alias) Ҏl定的实体的名称QnameQ,创徏一个新?tt>Criteria实例Qƈ赋予它(实体c)一个别?/td> |
Query | createFilter(Object collection, String queryString) Ҏl定的collection和过滤字W串Q查询条Ӟ创徏一个新?tt>Query实例?/td> |
Query | createQuery(String queryString) Ҏl定的HQL查询条g创徏一个新?tt>Query实例?/td> |
SQLQuery | createSQLQuery(String queryString) Ҏl定的SQL查询条g创徏一个新?tt>SQLQuery实例?/td> |
void | delete(Object object) 从数据库中移除持久化QpersistentQ对象的实例?/td> |
void | delete(String entityName, Object object) 从数据库中移除持久化QpersistentQ对象的实例?/td> |
void | disableFilter(String filterName) 用当前session的名U过滤器?/td> |
Connection | disconnect() 断开Session与当前的JDBCq接?/td> |
Filter | enableFilter(String filterName) 打开当前session的名U过滤器?/td> |
void | evict(Object object) 当前对象实例从session~存中清除?/td> |
void | flush() 强制提交hQflushQ?tt>Session?/td> |
Object | get(Class clazz, Serializable id) Ҏl定标识和实体类q回持久化对象的实例Q如果没有符合条件的持久化对象实例则q回null?/td> |
Object | get(Class clazz, Serializable id, LockMode lockMode) Ҏl定标识和实体类q回持久化对象的实例Q如果没有符合条件的持久化对象实例则q回null?/td> |
Object | get(String entityName, Serializable id) q回与给定的实体命名和标识匹配的持久化实例,如果没有对应的持久化实例则返回null?/td> |
Object | get(String entityName, Serializable id, LockMode lockMode) q回与给定的实体cd标识所匚w的持久化实例Q如果没有对应的持久化实例则q回null?/td> |
CacheMode | getCacheMode() 得到当前的缓存模式?/td> |
LockMode | getCurrentLockMode(Object object) 给定对象当前的锁定U别?/td> |
Filter | getEnabledFilter(String filterName) Ҏ名称获取一个当前允许的qo器(filterQ?/td> |
EntityMode | getEntityMode() 获取q个session有效的实体模式?/td> |
String | getEntityName(Object object) q回一个持久化对象的实体名U?/td> |
FlushMode | getFlushMode() 获得当前的刷新提交(flushQ模式?/td> |
Serializable | getIdentifier(Object object) 获取l定的实体对象实例在Session的缓存中的标识,如果该实例是自由状态(TransientQ的或者与其它Session兌则抛Z个异常?/td> |
Query | getNamedQuery(String queryName) 从映文件中Ҏl定的查询的名称字符串获取一?tt>QueryQ查询)实例?/td> |
Session | getSession(EntityMode entityMode) Ҏl定的实体模式(Entity ModeQ开始一个新的有效的Session?/td> |
SessionFactory | getSessionFactory() 获取创徏q个session?tt>SessionFactory实例? |
SessionStatistics | getStatistics() 获取q个session的统计信息?/td> |
Transaction | getTransaction() 获取与这个session兌?tt>TransactionQ事务)实例?instance associated with this session. |
boolean | isConnected() 查当?tt>Session是否处于q接状态?/td> |
boolean | isDirty() 当前Session是否包含需要与数据库同步的Q数据状态)变化 Q如果我们刷新提交(flushQ这个session是否会有SQL执行Q?/td> |
boolean | isOpen() 查当?tt>Session是否仍然打开?/td> |
Object | load(Class theClass, Serializable id) 在符合条件的实例存在的情况下Q根据给定的实体cd标识q回持久化状态的实例?/td> |
Object | load(Class theClass, Serializable id, LockMode lockMode) 在符合条件的实例存在的情况下Q根据给定的实体cR标识及指定的锁定等U返回持久化状态的实例?/td> |
void | load(Object object, Serializable id) 与l定的标C对应的持久化状态(|复制到给定的自由状态(trasientQ实例上?/td> |
Object | load(String entityName, Serializable id) 在符合条件的实例存在的情况下Q根据给定的实体cd标识q回持久化状态的实例?/td> |
Object | load(String entityName, Serializable id, LockMode lockMode) 在符合条件的实例存在的情况下Q根据给定的实体cR标识及指定的锁定等U返回持久化状态的实例?/td> |
void | lock(Object object, LockMode lockMode) 从给定的对象上获取指定的锁定U别?/td> |
void | lock(String entityName, Object object, LockMode lockMode) 从给定的对象上获取指定的锁定U别?/td> |
Object | merge(Object object) 给定的对象的状态复制到h相同标识的持久化对象上?/td> |
Object | merge(String entityName, Object object) 给定的对象的状态复制到h相同标识的持久化对象上?/td> |
void | persist(Object object) 一个自q态(transientQ的实例持久化?/td> |
void | persist(String entityName, Object object) 一个自q态(transientQ的实例持久化?/td> |
void | reconnect() 不推荐的?/b> 手工的重新连接只应用于应用程序提供连接的情况Q在q种情况下或许应该?a href="/org/hibernate/Session.html#reconnect(java.sql.Connection)"> reconnect(java.sql.Connection) ?/i> |
void | reconnect(Connection connection) 重新q接到给定的JDBCq接?/td> |
void | refresh(Object object) 从数据库中重新读取给定实例的状态?/td> |
void | refresh(Object object, LockMode lockMode) Ҏ指定?tt>锁定模式QLockModeQ?/tt>Q从数据库中重新dl定实例的状态?/td> |
void | replicate(Object object, ReplicationMode replicationMode) 使用当前的标识值持久化l定的游ȝ态(TransientQ的实体?/td> |
void | replicate(String entityName, Object object, ReplicationMode replicationMode) 使用当前的标识值持久化l定的游ȝ态(TransientQ的实体?/td> |
Serializable | save(Object object) 首先为给定的自由状态(TransientQ的对象Q根据配|)生成一个标识ƈ赋|然后其持久化?/td> |
Serializable | save(String entityName, Object object) 首先为给定的自由状态(TransientQ的对象Q根据配|)生成一个标识ƈ赋|然后其持久化?/td> |
void | saveOrUpdate(Object object) Ҏl定的实例的标识属性的|注:可以指定unsaved-value。一般默认null。)来决定执?save() ?tt>update()操作?/td> |
void | saveOrUpdate(String entityName, Object object) Ҏl定的实例的标识属性的|注:可以指定unsaved-value。一般默认null。)来决定执?save() ?tt>update()操作?/td> |
void | setCacheMode(CacheMode cacheMode) 讄h提交模式?/td> |
void | setFlushMode(FlushMode flushMode) 讄h提交模式?/td> |
void | setReadOnly(Object entity, boolean readOnly) 一个未l更改的持久化对象设|ؓ只读模式Q或者将一个只d象标Cؓ可以修改的模式?/td> |
void | update(Object object) Ҏl定的detachedQ游ȝ态)对象实例的标识更新对应的持久化实例?/td> |
void | update(String entityName, Object object) Ҏl定的detachedQ游ȝ态)对象实例的标识更新对应的持久化实例?/td> |
from:http://www.aygfsteel.com/iamtin/archive/2006/03/06/33910.html