原來使用了SQLQuery 然後執行了 executeUpdate();
就是executeUpdate會把所有的緩存都清除。。。
要麼就在配置文件中加上
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
<property name="cacheQueries" value="true"></property>
</bean>
很容易漏掉的東西 自己給自己提個醒
====================
有一個解決方案就是,直接修改源代碼中的東西,把修改的那一行給註釋掉。
修改原因:hibernate3 在 對sql 語句的excuteUpdate()調用時候,會清空相關實體的二級緩存,但是有些時候我們並不需要清空二級緩存,
所以註釋掉 NativeSQLQueryPlan.java 中的 coordinateSharedCacheCleanup( session ),如果想要對sql 語句 的 executeUpdate() 同時清空相應實體的二級緩存
,可以手動調用getSessionFactory().evict(class1) 。
SybaseDialect.java,Sybase11Dialect.java
修改原因:hibernate 在針對sybase數據庫分頁查詢的時候沒有真正實現在數據庫端的分頁處理, 所以修改了Sybase11Dialect .java 和 SybaseDialect .java 文件
修復了 分頁查詢中數據量過大時內存溢出的問題。