Hibernate - 会话


会话用于获取与数据库的物理连接。Session 对象是轻量级的,旨在每次需要与数据库交互时实例化。持久对象通过会话对象保存和检索。

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

在给定时间点,实例可能存在以下三种状态之一 -

  • 瞬态- 持久类的新实例,它不与会话关联,并且在数据库中没有表示形式,并且没有标识符值被 Hibernate 视为瞬态。

  • 持久性- 您可以通过将瞬态实例与会话关联来使其持久化。持久实例在数据库中具有表示形式、标识符值并与会话关联。

  • 分离- 一旦我们关闭 Hibernate 会话,持久实例将成为分离实例。

如果 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抛出异常,则事务必须回滚并且会话必须被丢弃。

会话接口方法

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

先生。 会议方法及说明
1

交易开始交易()

开始一个工作单元并返回关联的 Transaction 对象。

2

无效取消查询()

取消当前查询的执行。

3

无效清除()

完全清除会话。

4

连接关闭()

通过释放 JDBC 连接并进行清理来结束会话。

5

Criteria createCriteria(持久类类)

为给定的实体类或实体类的超类创建一个新的 Criteria 实例。

6

条件 createCriteria(String 实体名称)

为给定的实体名称创建一个新的 Criteria 实例。

7

可序列化的 getIdentifier(Object 对象)

返回与此会话关联的给定实体的标识符值。

8

查询createFilter(对象集合,字符串queryString)

为给定的集合和过滤器字符串创建一个新的 Query 实例。

9

查询createQuery(字符串queryString)

为给定的 HQL 查询字符串创建一个新的 Query 实例。

10

SQLQuery createSQLQuery(字符串查询字符串)

为给定的 SQL 查询字符串创建一个新的 SQLQuery 实例。

11

无效删除(对象对象)

从数据存储中删除持久实例。

12

void delete(String 实体名称, Object 对象)

从数据存储中删除持久实例。

13

会话 get(String 实体名称, 可序列化 id)

返回具有给定标识符的给定命名实体的持久实例,如果不存在这样的持久实例,则返回 null。

14

SessionFactory getSessionFactory()

获取创建此会话的会话工厂。

15

无效刷新(对象对象)

从底层数据库重新读取给定实例的状态。

16

交易 getTransaction()

获取与此会话关联的事务实例。

17 号

布尔值 isConnected()

检查会话当前是否已连接。

18

布尔 isDirty()

此会话是否包含任何必须与数据库同步的更改?

19

布尔值 isOpen()

检查会话是否仍处于打开状态。

20

可序列化保存(Object对象)

保留给定的瞬态实例,首先分配生成的标识符。

21

无效saveOrUpdate(对象对象)

保存(Object)或更新(Object)给定实例。

22

无效更新(对象对象)

使用给定分离实例的标识符更新持久实例。

23

void update(String 实体名称, Object 对象)

使用给定分离实例的标识符更新持久实例。