2015-06-30 80 views
0

我在一個java項目上使用EHCache。我在這段代碼中遇到了問題。我的目標是緩存在這個時候!原始元素EHCache更改

Element lElem = cacheManager.get("KEY"); 

    if (lElem != null) { 
     // Get my cached objects 
     lLMyVO = (List<MyVO>) lElem.getObjectValue(); 
    }else{ 
     // Do something to set element 
    } 

    // Add some elements on lLMyVO list : 
    for (MyVO lAnotherMyVO : lAnotherList) { 
     lLMyVO .add(lMyVO); 
    } 

在這一點上,我lLMyVO名單有lAnotherList元素!沒關係。但在我的EHCache對象元素lAnotherList也添加了!這並不好,我不想改變緩存。

它似乎是lLMyVO它不是一個新的對象,而只是對緩存中的對象的引用。

你知道該怎麼辦?

回答

3

默認情況下,您的元素將作爲引用存儲在EHCache中,直到出現文件寫入或其他複製。爲了防止您在緩存配置中使用'copyOnWrite'/'copyOnRead'屬性。所以對象將被複制到你的put/get操作中,並且不允許突變。

Ehcache documentation for reference

+0

謝謝你的工作! – user3469203

0

(這可能不是理想的解決方案,只是讓另一個選項)

爲了增加@Alexey的答案.. 如果您有唯一會發生突變的幾個場景,您可以只需從EHCache中檢索後選擇克隆對象即可。這可以節省每次複製它的一些開銷。

+0

感謝Julien的想法。我改變了配置,因爲在從ehcache中讀取對象之後,我從不需要改變對象。 – user3469203

相關問題