- Hibernate 教程
- Hibernate - 首页
- ORM - 概述
- Hibernate - 概述
- Hibernate - 架构
- Hibernate - 环境
- Hibernate - 配置
- Hibernate - 会话
- Hibernate - 持久类
- Hibernate - 映射文件
- Hibernate - 映射类型
- Hibernate - 示例
- Hibernate - 对象关系映射
- Hibernate - 级联类型
- Hibernate - 注解
- Hibernate - 查询语言
- Hibernate - Criteria 查询
- Hibernate - 原生 SQL
- Hibernate - 缓存
- Hibernate - 实体生命周期
- Hibernate - 批量处理
- Hibernate - 拦截器
- Hibernate - ID 生成器
- Hibernate - 保存图片
- Hibernate - log4j 集成
- Hibernate - Spring 集成
- Hibernate - Struts 2 集成
- Hibernate - Web 应用
- 映射表示例
- Hibernate - 基于层次结构的表
- Hibernate - 基于具体类的表
- Hibernate - 基于子类的表
- Hibernate 有用资源
- Hibernate - 问答
- Hibernate - 快速指南
- Hibernate - 有用资源
- Hibernate - 讨论
Hibernate - 会话
会话用于获取与数据库的物理连接。会话对象是轻量级的,设计为每次需要与数据库交互时都进行实例化。持久化对象通过会话对象进行保存和检索。
会话对象不应长时间保持打开状态,因为它们通常不是线程安全的,应该根据需要创建和销毁它们。会话的主要功能是为映射实体类的实例提供、创建、读取和删除操作。
在给定的时间点,实例可能处于以下三种状态之一:
瞬时 - 新的持久类实例,它不与会话关联,在数据库中没有表示,也没有标识符值,Hibernate认为它是瞬时的。
持久化 - 通过将其与会话关联,可以使瞬时实例持久化。持久化实例在数据库中具有表示,具有标识符值,并与会话关联。
脱管 - 关闭 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 接口提供了许多方法,但我只列出一些重要的方法,我们将在本教程中使用这些方法。有关与Session 和SessionFactory 关联的完整方法列表,您可以查看 Hibernate 文档。
序号 | 会话方法和描述 |
---|---|
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) 使用给定脱管实例的标识符更新持久化实例。 |