2010-01-07 47 views
3

當您運行JPQL更新或刪除查詢時,Hibernate是否足夠智能以使更改的實體的二級高速緩存失效?運行JPQL更新語句時Hibernate二級高速緩存是否失效

人爲的例子:

你有JPQL:

update Product p set p.status = 'S' where p.name like 'Monitor%' 

如果您目前有產品時語句運行的2級高速緩存,將休眠無效的所有產品從緩存或不它對緩存沒有任何幫助,二級緩存中的產品現在無效了?

僅供參考...我使用JBoss 5.1與Hibernate和JBossCache的

+0

有趣。我認爲你可以檢查 - 設置showSql = true(或者如果不使用JPA,在控制檯上顯示sql輸出的hibernate屬性),看看hibernate是否從數據庫中再次獲取一個剛剛用hql更新的實體。 – Bozho 2010-01-08 06:52:46

+0

這隻會告訴你它是否將這些項目重新加載到緩存中,我不認爲它會這樣做。它不會告訴你的是,如果它使緩存失效,那麼該實體的所有實例將不得不從數據庫重新加載。我想我只需要做一個測試並找出答案。我希望這裏有人會有一個快速的答案。 – larf311 2010-01-08 17:14:56

回答

0

跑我自己的測試和整個看起來this bug運行,它會作廢整個二級緩存,不只是二線後用於更新中涉及的任何實體的高級緩存。