org.hibernate.hibernate.connection.release_mode
org.hibernate.connection包的主要封装了通过JDBC来连接数据库的操作,用户可以以数据源的方式,或者通过特定数据库驱动的方式,甚至是自己定义连接类的方式来完成数据库的连接操作,包下面的代码文件并不多,只有5个,分别是ConnectionProviderFactory.Java,ConnectionProvider.java,DriverManagerConnectionProvider.java,DatasourceConnectionProvider.java,UserSuppliedConnectionProvider.java,其中ConnectionProvider是一个接口,DriverManagerConnectionProvider、DatasourceConnectionProvider、UserSuppliedConnectionProvider分别继承了这个接口,而ConnectionProviderFactory则是一个工厂类,他的主要作用是调用ConnectionProvider接口,而不关心接口的具体实现是DriverManagerConnectionProvider或者DatasourceConnectionProvider还是UserSuppliedConnectionProvider。
首先来看ConnectionProvider接口,提供了如下几个方法:
1.configure()方法主要是根据配置文件来初始化所有的连接信息。
2.getConnection()方法抓取一个连接。
3.closeConnection(Connection conn)方法关闭某个特定连接。
4.close()关闭所有连接。
5.supportsAggressiveRelease()方法和hibernate.connection.release_mode配置参数有关,该参数用来指定使用哪一种连接释放模式。HIBERNATE参考手册是这样描的: Hibernate关于JDBC连接管理的旧(2.x)行为是,Session在第一次需要的时候获取一个连接,在session关闭之前一直会持有这个连接。Hibernate引入了连接释放的概念,来告诉session如何处理它的JDBC连接。注意,下面的讨论只适用于采用配置ConnectionProvider来提供连接的情况,用户自己提供的连接与这里的讨论无关。通过org.hibernate.hibernate.connection.release_mode的不同枚举值来使用不用的释放模式:
ON_CLOSE - 基本上就是上面提到的老式行为。Hibernate session在第一次需要进行JDBC操作的时候获取连接,然后持有它,直到session关闭。
AFTER_TRANSACTION - 在org.hibernate.Transaction结束后释放连接。
AFTER_STATEMENT (也被称做积极释放) - 在每一条语句被执行后就释放连接。但假若语句留下了与session相关的资源,那就不会被释放。目前唯一的这种情形就是使用org.hibernate.ScrollableResults
auto(默认) - 这一选择把释放模式委派给org.hibernate.transaction.TransactionFactory.getDefaultReleaseMode()方法。对JTATransactionFactory来说,它会返回hibernate.connection.release_mode.AFTER_STATEMENT;对JDBCTransactionFactory来说,则是hibernate.connection.release_mode.AFTER_TRANSACTION。很少需要修改这一默认行为,因为假若设置不当,就会带来bug,或者给用户代码带来误导。
on_close - 使用 hibernate.connection.release_mode.ON_CLOSE. 这种方式是为了向下兼容的,但是已经完全不被鼓励使用了。
after_transaction - 使用hibernate.connection.release_mode.AFTER_TRANSACTION。这一设置不应该在JTA环境下使用。也要注意,使用hibernate.connection.release_mode.AFTER_TRANSACTION的时候,假若session 处于auto-commit状态,连接会像AFTER_STATEMENT那样被释放。
after_statement - 使用hibernate.connection.release_mode.AFTER_STATEMENT。除此之外,会查询配置的ConnectionProvider,是否它支持这一设置((supportsAggressiveRelease()))。假若不支持,释放模式会被设置为hibernate.connection.release_mode.AFTER_TRANSACTION。只有在你每次调用ConnectionProvider.getConnection()获取底层JDBC连接的时候,都可以确信获得同一个连接的时候,这一设置才是安全的;或者在auto-commit环境中,你可以不管是否每次都获得同一个连接的时候,这才是安全的。也就是说supportsAggressiveRelease()返回false的时候,释放模式会被设置为hibernate.connection.release_mode.AFTER_TRANSACTION。如果返回true,只表示它支持使用hibernate.connection.release_mode.AFTER_STATEMENT这一个设置,并不表示一定使用这个设置,请注意。
org.hibernate.hibernate.connection.release_mode的更多相关文章
- Caused by: org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set
docs.jboss.org文档示例代码:(http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/) sta ...
- Hibernate —— Hibernate 配置文件
1.Hibernate 配置文件主要用于配置**数据库连接**和 Hibernate 运行时所需的**各种属性**. 2.每一个 Hibernate 配置文件对应一个 Configuration 对象 ...
- hibernate hibernate.cfg.xml component 组件
1.为什么使用component组件? 当一个表的列数目比较多时,可以根据属性分类,将一个java对象拆分为几个对象. 数据库还是一张表,不过有多个对象与之对应. 2.实例 2.1 Java 对象: ...
- Hibernate——hibernate的配置测试
Hibernate Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自 ...
- 通过hibernate session.connection()获得数据库连接时,导致的查询缓慢甚至假死机问题
在使用hibernate的应用中,如果需要直接使用Java.sql.Connection,一般我们是通过hibernate的session.connection()获得的,然后session.clos ...
- Hibernate获取Connection
package com.trendcom.base.util; import java.sql.Connection; import java.sql.SQLException; import jav ...
- hibernate将connection放进threadlocal里实现数据库连接池
Why ThreadLocal? 无论如何,要编写一个多线程安全(Thread-safe)的程序是困难的,为了让线程共享资源,必须小心地对共享资源进行同步,同步带来一定的效能延迟,而另一方面,在处理同 ...
- Hibernate hibernate.cfg.xml配置
数据库连接<required>: <property name="hibernate.connection.driver_class"> com.mysql ...
- [Hibernate] hibernate.cfg.xml 配置文件的一些设置
<!-- 消除:Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect. ...
随机推荐
- POJ 1087 A Plug for UNIX (网络流,最大流)
题面 You are in charge of setting up the press room for the inaugural meeting of the United Nations In ...
- 解决Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project autotest_fchtgl: Compilation failure的方法
在碰到maven install 发现报错 Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.2:comp ...
- python数据库连接池设计
一.背景: 传统访问资源,一般分为一下几个步骤: 1.实例数据驱动对象与链接资源.2.实例操作资源游标.3.获取资源.4.关闭链接资源. 根据以上步骤,我们可以很简单使用这个原始方法来访问资源为我们业 ...
- Django入门开发之数据模型01
1. Django安装 [root@HappyLau ~]# pip install django==1.8.2 2. 创建项目 [root@HappyLau html]# django-admin ...
- Sqoop工具
简介 SQOOP是用于对数据进行导入导出的. (1)把MySQL.Oracle等数据库中的数据导入到HDFS.Hive.HBase中 (2)把HDFS.Hive.HBase中的数据导出到MySQL.O ...
- 为 Debian 8 或 Debian 9(64 位)安装 .NET Core
在 Debian 8 或 Debian 9(64 位)上安装 .NET Core 的具体步骤: 备注:必须有用户控制目录,才能通过 tar.gz 在 Linux 系统上进行安装. 1.准备一台刚安装的 ...
- GeoJSON C#判断某一点是否在某一区域范围之内
GeoJSON是一种对各种地理数据结构进行编码的格式,基于Javascript对象表示法的地理空间信息数据交换格式.GeoJSON对象可以表示几何.特征或者特征集合.GeoJSON支持下面几何类型:点 ...
- Java反射总结
一. 获取Class对象的3种方法: 1. Class.forName("");例如:Class.forName("java.lang.String"); 2. ...
- 性能优化之reflow和repaint
本文主要介绍一下什么是reflow,repaint, 怎样避免它们造成的不良影响, 怎么通过工具查看分析它们. 一.首先对浏览器渲染引擎下网页呈现过程简要说一下: 浏览器的渲染引擎开始解析html构建 ...
- 【Unity与23种设计模式】迭代器模式(Iterator)
GoF中定义: "在不知道集合内部细节的情况下,提供一个按序方法存取一个对象集合体的每一个单元." 迭代器模式由于经常使用到 已经被现代程序设计语言纳为标准语句或收录到标准函数库中 ...