2012-08-22 29 views
5

在我的查詢(查找)獲得緩存會話關閉後,在新會話中,在我通過隨機寫入Sql查詢更改數據庫後,hibernate會逐出所有內容,我該如何阻止發生?我正在研究爲很少改變的事情制定政策。ehcache hibernate第二級緩存,hibernate自動排除

INFO Executing [namedSqlQuery=dao.web_login, objs=[user1]] 
DEBUG org.springframework.orm.hibernate3.SessionFactoryUtils user1- Opening Hibernate Session 
DEBUG org.hibernate.impl.SessionImpl user1 - opened session at timestamp: 5511432318976000 
DEBUG org.hibernate.impl.SessionFactoryImpl user1- evicting second-level cache: USERS_LOOKUP 
DEBUG org.hibernate.impl.SessionFactoryImpl user1- evicting second-level cache: COUNTRY_LOOKUP 

ecache.xml

<cache name="query.oneHourPolicy" 
      maxElementsInMemory="10000" 
      eternal="false" 
      timeToLiveSeconds="3600" 
      diskPersistent="true" 
      overflowToDisk="true"/> 

彈簧hibernate配置

<prop key="hibernate.cache.use_second_level_cache">true</prop> 
       <prop key="hibernate.cache.use_query_cache">true</prop> 
       <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</prop> 
       <prop key="hibernate.cache.provider_configuration_file_resource_path">ehcache.xml</prop> 
+0

您的CacheMode設置爲REFRESH(即CacheMode.REFRESH) – Santosh

+0

不,我寫了一個junit類來在同一個會話中運行相同的查詢,但沒有隨機SQL,它從20秒到1秒纔得到答覆 – Rodriguez

+0

JUnit log 0st time - 20134 ms 1st time - 207 ms第2次 - 183 ms第3次 - 179 ms第4次 - 185 ms運行隨機sql查詢第5次 - 20043 ms第6次 - 182 ms第7次 - 181 ms第8次 - 177 ms第9次 - 179 ms – Rodriguez

回答

3

發現休眠期https://hibernate.onjira.com/browse/HHH-2224

我與波紋管進行了測試:

在我的隨機查詢

<sql-query name="random_write_query" callable="false"> 
     <synchronize table="USER"/> 
     <synchronize table="USER_ADDRESS"/> 
     {CALL PACKAGE.FUNCTION(?)} 
</sql-query> 

每當我撥打以上,這是一個DB改變它會作廢只能由表= USER或syncronized緩存USER_ADDRESS

只有syncronized隨機讀取查詢或實體將被驅逐

<sql-query name="random_read_query"> 
     <synchronize table="USER"/> 
     <synchronize table="USER_ADDRESS"/> 
     <return-scalar column="USERNAME" type="string"/> 
     <![CDATA[ 
      SELECT USERNAME FROM USER, USER_ADDRESS... 
     ]]> 
    </sql-query> 
相關問題