- Hibernate教程
- Hibernate - 主页
- ORM - 概述
- Hibernate - 概述
- Hibernate - 架构
- Hibernate - 环境
- Hibernate - 配置
- Hibernate - 会话
- Hibernate - 持久类
- Hibernate - 映射文件
- Hibernate - 映射类型
- Hibernate - 示例
- Hibernate - O/R 映射
- Hibernate - 注释
- Hibernate - 查询语言
- Hibernate - 标准查询
- Hibernate - 原生 SQL
- Hibernate - 缓存
- Hibernate - 批处理
- Hibernate - 拦截器
- Hibernate 有用资源
- Hibernate - 问题与解答
- Hibernate - 快速指南
- Hibernate - 有用的资源
- Hibernate - 讨论
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 文档以获取与Session和SessionFactory关联的方法的完整列表。
先生。 | 会议方法及说明 |
---|---|
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 对象) 使用给定分离实例的标识符更新持久实例。 |