![](/img/trans.png)
[英]Cache ignored using Spring 4 @Transactional + Hibernate 4 + EHCache
[英]Does Spring @Transactional use any Hibernate cache?
@Transactional
public MyEntity getEntity(long id) {
return dao.findOne(id);
//or select and update as well
}
每次調用事務方法時:我是否會從hibernate獲取任何緩存實體(第一次除外)? 或者我是否總是從DB獲取新鮮的實體?
這很重要,因為我將有兩個獨立的應用程序將共享相同的數據庫,我想確保hibernate不返回任何緩存的實體,而另一個應用程序可能已經在后台更新了DB中的相同實體。
簡短的回答是肯定的。
答案很簡單:@Transactional所做的就是為你提供一個休眠會話,並開始/提交一個事務,如果配置的話。 它不關心會話是否啟用了緩存。 緩存由會話在內部完成。
所以你需要的是理解hibernate緩存:
默認情況下啟用一級緩存(每個會話),您無法禁用它,
默認情況下,二級緩存(每個SessionFactory)是禁用的,請參見此處如何啟用Ehcache(只有@Cache帶注釋的實體最終在二級緩存中)。
無論@Transactional是打開新會話,還是將重用現有會話,都是可配置的,它取決於CurrentSessionContext實現。 您可以插入自己的實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.