2015-06-30 73 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

相关问题