2013-07-02 27 views
0

Enviorment-Hibernate查詢緩存不返回新添加的實體

  1. Hibernate-啓用查詢緩存和二級緩存

  2. 緩存used-的Ehcache與updatetimestampcache設置是永恆的。

問題 - 對於實體​​E,I具有在表2點中的行。因此,在通過帶有setcacheable(true)的條件進行查詢(以獲取所有行)時,第一次填充第二級緩存和查詢緩存。

通過具有setcacheable(true)的條件進一步執行相同查詢從查詢​​緩存中提供。到現在爲止還挺好。

問題 - 通過事務服務層方法,使用hibernate保存實體E的新對象(現在不存在實體E的表中有3行)。 任何進一步查詢以獲取實體E的行(使用setcacheable(true))只返回2個對象。在哪裏應該返回3個對象。

看起來實體E的查詢緩存未驗證時,新實體保存在其表中。

+0

要麼:更新沒有真正發生/提交,或者更新時間戳未更新......如何縮小問題出在哪裏可以嘗試使用不同的2LC提供程序來查看問題是否存在與EhCache或休眠。您可以嘗試Infinispan(https://github.com/galderz/secondlc中的一些示例)。即使對於插入,您也可以使用READ_ONLY並避免需要JTA事務。 –

回答

-1

SO這是我認爲是根本原因,它是我的應用程序使用ehcahce的方式。 詳情如下

  1. 我有兩個單獨的應用程序託管在同一Tomcat。
  2. 這兩個應用程序使用都具有相同的jar(每個應用程序在它的lib中都有一個jar),它連接到數據庫並加載ehcache。

很清楚,如果應用程序A插入,它只是使自己的ehcache無效。由於其他應用程序B託管在同一個tomcat中,擁有自己的ehcahe區域,因此應用程序b將繼續使用陳舊的數據。