由于公司需要标准化项目,规范jdk,tomcat等version,
版本规范:6.x --> 7.0.90
版本规范:jdk1.6.x -- >jdk1.8.0_181
版本规范:spring3.x -- >spring-4.3.7
项目中使用了hibernate3.x,和规范后的jdk1.8不兼容,导致需要升级hibernate的版本,目前升级版本至
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.11.Final</version>
升级hibernate后导致了一系列的异常,其中connection holder is null这个问题为提交事务的时候抛出来的
从网上得知的解决方案:
https://blog.csdn.net/wo8553456/article/details/40396401
插入后跟进源代码发现配置已生效,然而hibernate提交事务的时候一样会报错(项目中使用的是声明式注解事务)
找了好久没搞定求助架构大佬后大佬指出,hibernate3中的配置connection.release_mode在hibernate4中会导致连接直接被关闭
源代码跟进见 https://blog.csdn.net/ayanami001/article/details/48181243
跟进源代码见下:
进入下面这个 this.getLogicalConnection().releaseConnection()后.连接就会被释放掉(提交事务逻辑里面),导致最终提交事务事连接为null抛出 connection holder is null 异常!
最终在hibernate的配置中去除了<prop key="hibernate.connection.release_mode">after_statement</prop>后,事务提交正常!
ps:其他hibernate异常或者tomcat改造异常见下面连接