Hibernate - 会话

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

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

实例可能存在于给定点的以下三种状态之一中时间和减去;

  • 瞬态 : 持久化类的一个新实例,它与Session没有关联,并且在数据库中没有任何表示,并且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 接口提供了多种方法,但我将仅列出一些重要方法,我们将在本教程中使用它.您可以查看Hibernate文档以获取与会话 SessionFactory 相关联的方法的完整列表.

Sr.No.会话方法& ;描述
1

Transaction beginTransaction()

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

2

void cancelQuery()

取消当前查询的执行.

3

void clear()

完全清除会话.

4

Connection close()

通过释放JDBC连接并清理来结束会话.

5

Criteria createCriteria(类persistentClass)

为给定的实体类或实体的超类创建新的Criteria实例class.

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查询strin创建一个新的SQLQuery实例g.

11

void delete(Object object)

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

12

void delete(String entityName,Object object)

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

13

会话获取(字符串) entityName,Serializable id)

返回给定标识的给定命名实体的持久化实例,如果没有这样的持久化实例则返回null.

14

SessionFactory getSessionFactory()

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

15

void refresh(Object object)

重新读取状态来自底层数据库的给定实例.

16

事务getTransaction()

获取与此会话关联的Transaction实例.

17

boolean isConnected()

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

18

boolean isDirty()

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

19

boolean isOpen()

检查会话是否仍然开放.

20

可序列化保存(Object object)

坚持给定瞬态实例,首先分配生成的标识符.

21

void saveOrUpdate(Object object)

保存(对象)或更新(对象)给定的实例.

22

void update(Object object)

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

23

void update(String entityName,Object object)

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