会话用于获取与数据库的物理连接. 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) 使用给定分离实例的标识符更新持久化实例. |