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: SessionFactory
Method Summary |
|
Transaction |
beginTransaction() |
void |
cancelQuery() |
void |
clear() |
Connection |
close() |
Connection |
connection() 如果这个session使用了积极的collection释放策略(如CMT-容器控制事务的环境下),关闭这个调用的连接的职责应该由当前应用程序负责。 |
boolean |
contains(Object object) |
Criteria |
createCriteria(Class persistentClass) |
Criteria |
createCriteria(Class persistentClass, String alias) |
Criteria |
createCriteria(String entityName) |
Criteria |
createCriteria(String entityName, String alias) |
Query |
createFilter(Object collection, String queryString) |
Query |
createQuery(String queryString) |
SQLQuery |
createSQLQuery(String queryString) |
void |
delete(Object object) |
void |
delete(String entityName, Object object) |
void |
disableFilter(String filterName) |
Connection |
disconnect() |
Filter |
enableFilter(String filterName) |
void |
evict(Object object) |
void |
flush() |
Object |
get(Class clazz, Serializable id) |
Object |
get(Class clazz, Serializable id, LockMode lockMode) |
Object |
get(String entityName, Serializable id) |
Object |
get(String entityName, Serializable id, LockMode lockMode) |
CacheMode |
getCacheMode() |
LockMode |
getCurrentLockMode(Object object) |
Filter |
getEnabledFilter(String filterName) |
EntityMode |
getEntityMode() |
String |
getEntityName(Object object) |
FlushMode |
getFlushMode() |
Serializable |
getIdentifier(Object object) |
Query |
getNamedQuery(String queryName) |
Session |
getSession(EntityMode entityMode) |
SessionFactory |
getSessionFactory() |
SessionStatistics |
getStatistics() |
Transaction |
getTransaction() |
boolean |
isConnected() |
boolean |
isDirty() |
boolean |
isOpen() |
Object |
load(Class theClass, Serializable id) |
Object |
load(Class theClass, Serializable id, LockMode lockMode) |
void |
load(Object object, Serializable id) |
Object |
load (String entityName, Serializable id) |
Object |
load (String entityName, Serializable id, LockMode lockMode) |
void |
lock(Object object, LockMode lockMode) |
void |
lock(String entityName, Object object, LockMode lockMode) |
Object |
merge(Object object) |
Object |
merge(String entityName, Object object) |
void |
persist(Object object) |
void |
persist(String entityName, Object object) |
void |
reconnect() |
void |
reconnect(Connection connection) |
void |
refresh(Object object) |
void |
refresh(Object object, LockMode lockMode) |
void |
replicate(Object object, ReplicationMode replicationMode) |
void |
replicate(String entityName, Object object, ReplicationMode replicationMode) |
Serializable |
save(Object object) |
Serializable |
save(String entityName, Object object) |
void |
saveOrUpdate(Object object) 根据给定的实例的标识属性的值(注:可以指定unsaved-value。一般默认null。)来决定执行 save() 或update()操作。 |
void |
saveOrUpdate(String entityName, Object object) |
void |
setCacheMode(CacheMode cacheMode) |
void |
setFlushMode(FlushMode flushMode) |
void |
setReadOnly(Object entity, boolean readOnly) |
void |
update(Object object) |
void |
update(String entityName, Object object) |