会话(Session)
会话用于获取与数据库的物理连接。 Session 对象是轻量级的,旨在每次与数据库进行交互时进行实例化。 持久对象通过Session对象保存和检索。
会话对象不应该长时间保持打开状态,因为它们通常不是线程安全的,应该根据需要创建和销毁它们。 Session的主要功能是为映射实体类的实例提供,创建,读取和删除操作。
在给定时间点,实例可能存在以下三种状态之一 -
transient - 持久化类的新实例,它与Session无关,在数据库中没有任何表示,Hibernate认为没有标识符值是瞬态的。
persistent - 您可以通过将瞬态实例与Session相关联来使其持久化。 持久化实例在数据库中具有表示,标识符值并与会话相关联。
detached - 一旦我们关闭Hibernate Session,持久化实例将成为一个分离的实例。
如果Session实例的持久化类是可序列化的,则它是可序列化的。 典型的交易应使用以下习语 -
Session session = factory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
// do some work
...
tx.commit();
}
catch (Exception e) {
if (tx!=null) tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
如果会话抛出异常,则必须回滚事务并且必须丢弃该会话。
会话接口方法
Session接口提供了许多方法,但我将仅列出一些重要的方法,我们将在本教程中使用它们。 您可以查看Hibernate文档以获取与Session和SessionFactory相关的方法的完整列表。
Sr.No. | 会话方法和描述 |
---|---|
1 | Transaction beginTransaction() 开始一个工作单元并返回关联的Transaction对象。 |
2 | void cancelQuery() 取消当前查询的执行。 |
3 | void clear() 完全清除会话。 |
4 | Connection close() 通过释放JDBC连接并清理来结束会话。 |
5 | Criteria createCriteria(Class persistentClass) 为给定的实体类或实体类的超类创建新的Criteria实例。 |
6 | Criteria createCriteria(String entityName) 为给定的实体名称创建新的Criteria实例。 |
7 | Serializable getIdentifier(Object object) 返回与此会话关联的给定实体的标识符值。 |
8 | Query createFilter(Object collection, String queryString) 为给定的集合和过滤器字符串创建一个新的Query实例。 |
9 | Query createQuery(String queryString) 为给定的HQL查询字符串创建Query的新实例。 |
10 | SQLQuery createSQLQuery(String queryString) 为给定的SQL查询字符串创建SQLQuery的新实例。 |
11 | void delete(Object object) 从数据存储中删除持久性实例。 |
12 | void delete(String entityName, Object object) 从数据存储中删除持久性实例。 |
13 | Session get(String entityName, Serializable id) 使用给定标识符返回给定命名实体的持久实例,如果没有此类持久实例,则返回null。 |
14 | SessionFactory getSessionFactory() 获取创建此会话的会话工厂。 |
15 | void refresh(Object object) 从底层数据库重新读取给定实例的状态。 |
16 | Transaction getTransaction() 获取与此会话关联的Transaction实例。 |
17 | boolean isConnected() 检查会话当前是否已连接。 |
18 | boolean isDirty() 此会话是否包含必须与数据库同步的任何更改? |
19 | boolean isOpen() 检查会话是否仍处于打开状态。 |
20 | Serializable save(Object object) 保留给定的瞬态实例,首先分配生成的标识符。 |
21 | void saveOrUpdate(Object object) 保存(Object)或更新(Object)给定实例。 |
22 | void update(Object object) 使用给定分离实例的标识符更新持久性实例。 |
23 | void update(String entityName, Object object) 使用给定分离实例的标识符更新持久性实例。 |