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这一个设置,并不表示一定使用这个设置,请注意。

转载于:https://www.cnblogs.com/zhengshiqiang47/p/6832813.html

org.hibernate.hibernate.connection.release_mode相关推荐

  1. hibernate.connection.release_mode

    org.hibernate.connection包的主要封装了通过JDBC来连接数据库的操作,用户可以以数据源的方式,或者通过特定数据库驱动的方式,甚至是自己定义连接类的方式来完成数据库的连接操作,包 ...

  2. INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!)的解决

    今天按照学习视频学习了Hibernate的入门课程: 前提:用的mysql数据库 前提:导入了hibernate的jar包和JUnit4.0的jar包,还有mysql的jdbc驱动jar包,就是这货: ...

  3. ssh(Spring+Spring mvc+hibernate)——hibernate.cfg.xml

    <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC"-//Hib ...

  4. Hibernate -- hibernate.cfg.xml 核心配置文件

    2019独角兽企业重金招聘Python工程师标准>>> <?xml version="1.0" encoding="UTF-8"?> ...

  5. php hibernate,Hibernate总结

    Hibernate为了提高性能,提供了缓存与快照机制. 它的缓存分为一级缓存与二级缓存. Hibernate一级缓存:当一个事务中执行一次Sql语句时,就将返回的结果存储在Session中的Map集合 ...

  6. HIbernate——hibernate中的各种查询

    一.通过oid查询 @Test public void func1(){Session session = HibernateUtils.openSession();Transaction tx = ...

  7. Hibernate配置时易忘掉的一项-release_mode

    使用hibernate時,大家一般都記住了配置基本的那些選項,比如方言,緩存等,但是有一項配置卻很容易忘掉,這就是連接釋放模式:hibernate.connection.release_mode,可有 ...

  8. Hibernate 中配置属性详解(hibernate.properties)

    转自:https://blog.csdn.net/shudaqi2010/article/details/70324843 Hibernate能在各种不同环境下工作而设计的, 因此存在着大量的配置参数 ...

  9. Hibernate 参数设置一览表

    转自"":https://blog.csdn.net/baidu_18607183/article/details/5248671 1 实现包含了Hibernate与数据库的基本连 ...

最新文章

  1. CocoaPods管理iOS的第三方类库
  2. Android 自定义WaveProgressView满足你所有水波纹加载需求
  3. 你不一定懂的cpu显示信息
  4. 关于cgroup的几个核心名词及其关系
  5. PHP的SOAP原理及实现
  6. 大龄程序员怎样渡过中年危机?(转)
  7. 活力四射的Windows Embedded Standard 7
  8. thinkphp 随机取10条数据_spark调优-数据倾斜
  9. 免费python网络课程-2019年10种免费的Python学习课程
  10. __main__.py:AttributeError: module 'labelme.utils' has no attribute 'draw_label'
  11. R可能让您惊喜的10件事
  12. SFTP服务器的搭建
  13. VS Code C语言开发环境配置附图版保姆教程
  14. 操作系统核心与驱动程序
  15. 营业执照如何完整的转为Word格式?
  16. 【Threejs效果:挖空几何体】ThreeBSP实现墙体挖洞
  17. 常州大学向艳c语言答案,C程序设计(2)
  18. CAN总线学习:MM32
  19. libvirt 的使用
  20. 云服务器是什么?云服务器有什么作用?

热门文章

  1. Winograd,GEMM算法综述(CNN中高效卷积实现)(下)
  2. python文本处理实例_Python 文件处理的简单示例
  3. hashmap是线程安全的吗?怎么解决?_解决SimpleDateFormat线程安全问题
  4. hmcl离线登陆_最好用的Java版启动器HMCL
  5. oracle rac ora 12537,解决11gR2 Rac ORA-12537: TNS:connection closed 一例
  6. linux下备份mysql上传到网盘_Linux命令行上传文件到百度网盘
  7. android file mkdir,android file.mkdir()一直返回false问题
  8. Makefile和Shell学习笔记
  9. 读自动驾驶激光雷达物体检测技术(Lidar Obstacle Detection)(3):Segmentation
  10. Linux那些事儿 之 戏说USB(9)面纱