2.Hibernate 会话

会话

Session 用于获取与数据库的物理连接。 Session 对象是轻量级的,并且设计为在每次需要与数据库进行交互时被实例化。持久态对象被保存,并通过 Session 对象检索找回。

该 Session 对象不应该长时间保持开放状态,因为它们通常不能保证线程安全,而应该根据需求被创建和销毁。Session 的主要功能是为映射实体类的实例提供创建,读取和删除操作。这些实例可能在给定时间点时存在于以下三种状态之一:

  • 瞬时状态: 一种新的持久性实例,被 Hibernate 认为是瞬时的,它不与 Session 相关联,在数据库中没有与之关联的记录且无标识符值。
  • 持久状态:可以将一个瞬时状态实例通过与一个 Session 关联的方式将其转化为持久状态实例。持久状态实例在数据库中没有与之关联的记录,有标识符值,并与一个 Session 关联。
  • 脱管状态:一旦关闭 Hibernate Session,持久状态实例将会成为脱管状态实例。

若 Session 实例的持久态类别是序列化的,则该 Session 实例是序列化的。一个典型的事务应该使用以下语法:

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 必须被丢弃。

Session 接口方法

Session 接口提供了很多方法,但在以下讲解中我将仅列出几个我们会在本教程中应用的重要方法。您可以查看 Hibernate 文件,查询与 Session 及 SessionFactory 相关的完整方法目录。

序号 Session 方法及说明
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)
为给定的集合和过滤字符创建查询的新实例。
9 Query createQuery(String queryString)
为给定的 HQL 查询字符创建查询的新实例。
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()
获取创建该会话的 session 工厂。
15 void refresh(Object object)
从基本数据库中重新读取给定实例的状态。
16 Transaction getTransaction()
获取与该 session 关联的事务实例。
17 boolean isConnected()
检查当前 session 是否连接。
18 boolean isDirty()
该 session 中是否包含必须与数据库同步的变化?
19 boolean isOpen()
检查该 session 是否仍处于开启状态。
20 Serializable save(Object object)
先分配一个生成的标识,以保持给定的瞬时状态实例。
21 void saveOrUpdate(Object object)
保存(对象)或更新(对象)给定的实例。
22 void update(Object object)
更新带有标识符且是给定的处于脱管状态的实例的持久化实例。
23
void update(String entityName, Object object)
更新带有标识符且是给定的处于脱管状态的实例的持久化实例。

_________________________________________________________________________________________________________________________________________

时间: 2024-08-28 07:32:22

2.Hibernate 会话的相关文章

Hibernate (开放源代码的对象关系映射框架)

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久

Spring/Hibernate应用性能调优

对于大多数典型的Spring/Hibernate 企业应用来说,应用程序的性能几乎完全取决于它的持久层的性能. 这篇文章将会对如何确认在“数据库约束”的应用前,使用7种“快速见效”的技巧来帮助我们提升应用性能. 如何确认一个应用受到“数据库约束” 为了验证一个应用程序是否受到“数据库约束”,首先在一些开发环境中做一些普遍的行为,即使用VisualVM来监控. VisualVM是一个搭载JDK的Java解析器,它通过调用jvisualvm来进行命令行登陆. 登陆Visual VM后按照这样做: 运

Hibernate Annotations

1.HibernateAnnotation依赖包 要使用HibernateAnnotation,您可以从Hibernate站点下载Hibernate3.6和HibernateAnnotation库.除了标准的HibernateJAR和依赖项之外,您还需要如下二个库: 1.HibernateAnnotationjar文件(hibernate-annotations.jar) 2.Java持久性API(lib/ejb3-persistence.jar) 下一步就是获取Hibernate会话工厂.近期

Hibernate入门笔记

相关基础概念请从其它教材简单了解,这里仅记录下第一个Hibernate程序的实现步骤. 环境说明: java开发工具:eclipse MARS.2 Release(4.5.2) hibernate版本:hibernate-release-4.3.6.Final Web 容器:Tomcat v8.0 数据库:MySQL 5.6.19-enterprise-commercial-advanced jdbc驱动:mysql-connector-java-commercial-5.1.30-bin.ja

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

在<many-to-on>中这错误很常见,字面意义就是不能被初始化,因为session已经关闭了. 简单理解就是因为,你使用了lazy=true,这样hibernate在从数据库中调数据的时候是不会把关联的对象查出来的,而是保存一个获取值得方法,在你使用getXXX()调用的时候,hiberante会利用这个保存的方法去从数据库中取数据.而往往我们在jsp页面中使用getXXX()准备展示数据的时候,session早已经在dao中就关闭了,我们该如何解决这种异常呢? 简单的说有三种:1.把la

Hibernate延迟加载

参考:http://blog.csdn.net/s_good/article/details/7411642 1.关于lazy机制: 延迟初始化错误是运用Hibernate开发项目时最常见的错误.如果对一个类或者集合配置了延迟检索策略,那么必须当代理类实例或代理集合处于持久化状态(即处于Session范围内)时,才能初始化它.如果在游离状态时才初始化它,就会产生延迟初始化错误. 下面把Customer.hbm.xml文件的<class>元素的lazy属性设为true,表示使用延迟检索策略: &

Hibernate (开放源代码的对象关系映射框架)介绍

Hibernate (开放源代码的对象关系映射框架) 编辑 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hiberna

1.Hibernate简介

1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发; b.大大减少代码量; c.性能稍高(不能与数据库高手相比,较一般数据库使用者编写的代码具有一定的优势): d.跨数据库平台: ORM(Object Relation Mapping): Object 实体类 属性 数据类型 对象 Relation 表名 字段 数据类型 记录 Mapping 把Object类型数据映射到关系型数据库中,这样就可以只操作对象,而不需要操作数据库. 2.Hibernate的运行过程如下

Hibernate Annotation笔记

(1)简介:在过去几年里,Hibernate不断发展,几乎成为Java数据库持久性的事实标准.它非常强大.灵活,而且具备了优异的性能.在本文中,我们将了解如何使用Java 5 注释来简化Hibernate代码,并使持久层的编码过程变得更为轻松. 传统上,Hibernate的配置依赖于外部 XML 文件:数据库映射被定义为一组 XML 映射文件,并且在启动时进行加载.    在最近发布的几个Hibernate版本中,出现了一种基于 Java 5 注释的更为巧妙的新方法.借助新的 Hibernate