Java中深入浅析的Hibernate事务管理

  

深入浅析Java中的Hibernate事务管理?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。


hibernate 版本:Hibernate 4.2.2 (下载后的文件名为hibernate-release-4.2.2.Final.zip,解压目录hibernate-release-4.2.2.Final)

数据库: Oracle 10g

导入lib\required 中的所有jar 包


1、SessionFactory负责创建Session,SessionFactory是线程安全的,多个并发线程可以同时访问一个SessionFactory 并从中获取Session实例

2、Session作为贯穿Hibernate的持久化管理器核心,提供了众多的持久化的方法,如save(), update ,delete ,find(Hibernate 3中已经取消了此方法)等,通过这些方法我们可以透明的完成对象的增删改查(CRUD-- create read update delete),这里所谓的透明是指,Session在读取,创建和删除影射的实体对象的实例时,这一系列的操作将被转换为对数据库表中数据的增加,修改,查询和删除操作。

Session有以下的特点

  1)不是线程安全的,应该避免多个线程共享同一个Session实例

  2)Session实例是轻量级的,所谓轻量级:是指他的创建和删除不需要消耗太多资源

  3)Session对象内部有一个缓存,被称为Hibernate第一缓存,他存放被当前工作单元中加载的对象,每个Session实例都有自己的缓存。

3、Hibernate Session缓存被称为Hibernate的第一级缓存。SessionFactory的外置缓存称为Hibernate的二级缓存。这两个缓存都位于持久层,它们存放的都是数据库数据的拷贝。SessionFactory的内置缓存 存放元数据和预定义SQL, SessionFactory的内置缓存是只读缓存。

4、Hibernate Session缓存的三大作用:

  1)减少数据库的访问频率,提高访问性能。

  2)保证缓存中的对象与数据库同步,位于缓存中的对象称为持久化对象。

  3)当持久化对象之间存在关联时,Session 保证不出现对象图的死锁。

Session 如何判断持久化对象的状态的改变呢?

Session 加载对象后会为对象值类型的属性复制一份快照。当Session 清理缓存时,比较当前对象和它的快照就可以知道那些属性发生了变化。

5、Session 什么时候清理缓存?

  1)commit() 方法被调用时

  2)查询时会清理缓存,保证查询结果能反映对象的最新状态。

  3)显示的调用session 的 flush方法。

session 清理缓存的特例:

当对象使用 native 生成器 时 会立刻清理缓存向数据库中插入记录。


测试的代码目录如下:

深入浅析Java中的Hibernate事务管理

hibernate.cfg.xml

& lt;及# 63;xml version=?.0“, # 63;比;   & lt; !DOCTYPE Hibernate配置公共“-//Hibernate/Hibernate配置3.0 DTD//EN"“http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"比;   & lt; hibernate-configuration>   & lt; session-factory>   & lt;属性名=皊how_sql"祝辞true   & lt;属性名=癶ibernate.connection.driver_class"祝辞   oracle.jdbc.driver.OracleDriver   & lt;/property>   & lt;属性名=癶ibernate.connection.url"祝辞   jdbc: oracle:薄:@XX.26.158.43:1521:李艾科   & lt;/property>   & lt;属性名=癶ibernate.connection.username"祝辞& lt;/property>   & lt;属性名=癶ibernate.connection.password"祝辞& lt;/property>   & lt;属性名=癲ialect"祝辞org.hibernate.dialect.OracleDialect      & lt;映射资源=?com/oscar999/trans/hibernate/Product.hbm.xml"/比;   & lt;/session-factory>   & lt;/hibernate-configuration>

产品。java

/* *   * @Title: Product.java   * @Package com.oscar999.trans.hibernate   * @Description:   * @author XM   2017年* @date 2月15日1:44:47点   * @version V1.0   */包com.oscar999.trans.hibernate;      进口java.io.Serializable;/* *   * @author XM   *   */公共类产品实现Serializable {      公共产品(){   }      私人整数id;      私人字符串名称;      私人字符串价格;      私有静态最终长serialVersionUID l=1;      公共整数getId () {   返回id;   }      公共空间setId(整数id) {   这一点。id=id;   }      公共字符串getName () {   返回名称;   }      公共空间setName(字符串名称){   this.name=名称;   }      公共字符串getPrice () {   回报价格;   }      公共空间setPrice (String) {   这一点。价格=价格;   }      }

Java中深入浅析的Hibernate事务管理