歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved