Hibernate 不能实时获取数据库中更新的记录问题解决

项目用到hibernate进行与mysql数据库的连接和操作,有一个“查询”模块和“添加”模块,是用不同的hibernate配置文件来做的。在做完添加后做查询时发现了问题,查询的结果总是添加之前的,而最新更新的记录却没有被查询得到。只有重启tomcat服务器才能查到更新的记录。

google之。

网上提到了hibernate的缓存机制,http://www.linuxidc.com/Linux/2014-09/106458.htm

按其中所说,查询前用session.clear();清除一级缓存,重新尝试添加+查询,还是查不到更新记录。用setCacheMode(CacheMode.IGNORE)清二级缓存,实验,失败。两个都进行清除,依然失败。

正迷茫时,找到了这里:http://www.linuxidc.com/Linux/2014-09/106459.htm

虽然说得并不是很明白,但是找到了问题所在:hibernate默认连接池的问题,使用c3p0连接池就可以了。于是按此方法以下述步骤解决问题:

首先添加需要的jar包:hibernate-c3p0-4.2.0.final.jar,c3p0-0.9.2.1.jar,mchange-commons-java-0.2.7.jar,可以分布去http://mvnrepository.com/和 http://www.java2s.com/下载,注意mchange-commons-java的版本不要过低,否则会ClassNotFound错。

修改hibernate配置文件,用c3p0连接池连接数据库,在之前的配置以外加入如下配置:

     < property  name = "hibernate.connection.provider_class" >org.hibernate.connection.C3P0ConnectionProvider</ property >
         < property  name = "hibernate.c3p0.max_size" >20</ property >
         < property  name = "hibernate.c3p0.min_size" >5</ property >
         <!--  <property name="hibernate.c3p0.timeout">120</property>-->
         < property  name = "automaticTestTable" >Test</ property >
         < property  name = "hibernate.c3p0.max_statements" >100</ property >
         < property  name = "hibernate.c3p0.idle_test_period" >120</ property >
         < property  name = "hibernate.c3p0.acquire_increment" >1</ property >
         < property  name = "c3p0.testConnectionOnCheckout" >true</ property >
         < property  name = "c3p0.idleConnectionTestPeriod" >18000</ property >
         < property  name = "c3p0.maxIdleTime" >25000</ property >

解决问题。

Hibernate整体理解 http://www.linuxidc.com/Linux/2014-07/104405.htm

Hibernate工作机制及其常用类和方法 http://www.linuxidc.com/Linux/2011-12/50419.htm

Hibernate 的详细介绍请点这里

Hibernate 的下载地址请点这里

原文地址:http://www.linuxidc.com/Linux/2014-09/106460.htm



需要的jar包下载地址:http://download.csdn.net/detail/pengyufight/9666160

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值