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
--------------------- 本文來自 pengyufight 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/pengyufight/article/details/52950432?utm_source=copy