Hibernate 简明教程

Hibernate - Sessions

使用会话来与数据库获得物理连接。会话对象是轻量的,并且设计为在需要与数据库进行交互时进行实例化。持久性对象通过会话对象保存并检索。

会话对象不应该长时间保持打开状态,因为它们通常不是线程安全的,并且应该根据需要创建和销毁它们。会话的主要功能是为映射实体类的实例提供、创建、读取和删除操作。

实例在给定的时间点可以处于以下三个状态之一 -

  1. transient - 持久类的某个新实例,但未关联到会话,并且在数据库中没有表示,Hibernate 认为没有标识符值是临时的。

  2. persistent - 您可以通过将一个瞬态实例与一个会话关联使其持久化。持久实例在数据库中具有一个表示,一个标识符值,并且与一个会话关联。

  3. detached - 一旦我们关闭 Hibernate 会话,持久实例将变成一个分离实例。

如果其持久类是可序列化的,则会话实例是可序列化的。一个典型的交易应该使用以下习语 -

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 Interface Methods

Session 接口提供了一些方法,但我只列出几个重要的方法,我们将在本教程中使用它们。您可以检查 Hibernate 文档以获取与 SessionSessionFactory 相关联的方法的完整列表。

Sr.No.

Session Methods & Description

1

Transaction beginTransaction() 开始一个工作单元并返回关联的事务对象。

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() 获取与该会话关联的事务实例。

17

boolean isConnected() 检查会话当前是否已连接。

18

boolean isDirty() 该会话是否包含必须与数据库同步的任何更改?

19

boolean isOpen() 检查会话是否仍处于打开状态。

20

Serializable save(Object object) 持久给定瞬态实例,首先分配生成的标识符。

21

void saveOrUpdate(Object object) 保存 (save) 或更新 (update) 给定实例。

22

void update(Object object) 使用给定分离实例的标识符更新持久实例。

23

void update(String entityName, Object object) 使用给定分离实例的标识符更新持久实例。