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

hibernate.connection.release_mode相关推荐

  1. org.hibernate.hibernate.connection.release_mode

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

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

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

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

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

  4. Hibernate 参数设置一览表

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

  5. Spring MVC+Spring +Hibernate配置事务,但是事务不起作用

    最近做项目,被一个问题烦恼了很久.使用Spring MVC+Spring +Hibernate开发项目,在使用注解配置事务管理,刚开始发现无论如何数据库都无法更新,但是可以从数据库查询到数据.怀疑是配 ...

  6. Hibernate配置属性详解

    http://www.360doc.com/content/12/0228/19/1369263_190362729.shtml 表 3.3.  Hibernate配置属性 属性名 用途 hibern ...

  7. spring+hibernate:在applicationCOntext.XML中配置C3P0参数说明

    背景: 在项目中遇到下面这个exception Exception occurred while logging on hibernate operation: Cannot open connect ...

  8. Sping +hibernate+JTA 注解配置

    随着业务的不断扩展数据库的压力越来越大,为了减少数据库的压力我们要从多方面考虑分析,并提出多个解决数据库压力大的问题,比如说根据业务分表.分库.增加缓存机制等等.如果是分库,如何做分布式呢?我就做分布 ...

  9. 关于connection holder is null的个人解决方案实践

    由于公司需要标准化项目,规范jdk,tomcat等version, 版本规范:6.x --> 7.0.90 版本规范:jdk1.6.x -- >jdk1.8.0_181 版本规范:spri ...

最新文章

  1. java提高篇(三十)-----Iterator
  2. 为什么硅谷公司对Android不感冒?
  3. 读书笔记 — Java高并发程序设计 — 第三章 — 锁
  4. 日常生活小技巧 -- 名词
  5. 知识库 IIS6.0中Response 对象 错误 ASP 0251 : 80004005
  6. android studio 导入依赖报错——Could not find com.xxx,(# fields: 66338 > 65536)
  7. 已知信码序列为1011_信息论与编码理论习题答案解析.doc
  8. 实时Linux内核调度器 | Real-Time Linux Kernel Scheduler
  9. 【暴力枚举】LeetCode 90. Subsets II
  10. 「CodePlus 2017 11 月赛」Yazid 的新生舞会(树状数组/线段树)
  11. 焦仲卿刺杀孙策_惊闻:孙伯符死于焦仲卿之手。。。
  12. aspectjweaver.jar包下载
  13. cad修改快捷键_怎么编辑CAD快捷键?
  14. android+cardview用法,Android CardView的使用
  15. 从培训机构出来的程序员,后来都怎么样了? | 程序员有话说
  16. 【报错排查】MAC系统升级后项目无法启动踩坑
  17. order by 按照指定顺序排序或自定义顺序排序
  18. 在线汇编翻译、函数对比
  19. JAVA版微信机器人(非公众号)【L】
  20. 【无标题】STM32F401串口6问题

热门文章

  1. 【Python】递归绘制科赫曲线及科赫雪花及转换成可执行文件打包
  2. Java8 EnumSet 源码简单分析
  3. Java8 PriorityBlockingQueue源码分析
  4. VTK:选定的顶点和边用法实战
  5. OpenCASCADE:绘制测试线束之命令语言
  6. wxWidgets:wxToolBar类用法
  7. boost::ptr_deque相关的测试程序
  8. boost::mp11::mp_set_intersection相关用法的测试程序
  9. boost::intrusive::unordered_set用法的测试程序
  10. boost::fibers::launch::post的测试程序