Hibernate 简明教程
Hibernate - Sessions
使用会话来与数据库获得物理连接。会话对象是轻量的,并且设计为在需要与数据库进行交互时进行实例化。持久性对象通过会话对象保存并检索。
会话对象不应该长时间保持打开状态,因为它们通常不是线程安全的,并且应该根据需要创建和销毁它们。会话的主要功能是为映射实体类的实例提供、创建、读取和删除操作。
实例在给定的时间点可以处于以下三个状态之一 -
-
transient - 持久类的某个新实例,但未关联到会话,并且在数据库中没有表示,Hibernate 认为没有标识符值是临时的。
-
persistent - 您可以通过将一个瞬态实例与一个会话关联使其持久化。持久实例在数据库中具有一个表示,一个标识符值,并且与一个会话关联。
-
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 文档以获取与 Session 和 SessionFactory 相关联的方法的完整列表。
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) 使用给定分离实例的标识符更新持久实例。 |