扫码一下
查看教程更方便
session 用于获取与数据库的物理连接。 session 对象是轻量级的,设计为在每次需要与数据库交互时实例化。 持久对象通过 session 对象进行保存和检索。
session 对象不应长时间保持打开状态,因为它们通常不是线程安全的,应根据需要创建和销毁它们。 session 的主要功能是为映射实体类的实例提供、创建、读取和删除操作。
实例在给定时间点可能存在以下三种状态之一
如果 session 实例的持久类是可序列化的,则它是可序列化的。 一个典型的事务应该使用以下原语
session session = factory.opensession();
transaction tx = null;
try {
tx = session.begintransaction();
...
tx.commit();
}
catch (exception e) {
if (tx!=null) tx.rollback();
e.printstacktrace();
} finally {
session.close();
}
如果 session 抛出异常,事务必须回滚,会话必须丢弃。
session 接口提供了许多方法,但我将仅列出一些重要的方法,我们将在本教程中使用它们。 我们可以查看 hibernate 文档以获取与 session
和 sessionfactory
关联的方法的完整列表。
序号 | 方法 | 描述 |
---|---|---|
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() | 获取与此会话关联的事务实例。 |
17 | boolean isconnected() | 检查会话当前是否已连接。 |
18 | boolean isdirty() | 此会话是否包含必须与数据库同步的任何更改? |
19 | boolean isopen() | 检查会话是否仍然打开。 |
20 | serializable save(object object) | 持久化给定的瞬态实例,首先分配一个生成的标识符。 |
21 | void saveorupdate(object object) | 保存或更新给定的实例。 |
22 | void update(object object) | 使用给定分离实例的标识符更新持久实例。 |
23 | void update(string entityname, object object) | 使用给定分离实例的标识符更新持久实例。 |