EHCache改变了原始元素

时间:2015-06-30 14:22:09

标签: java ehcache

我在java项目中使用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它不是一个新对象,而只是对缓存中对象的引用。

你知道怎么做吗?

2 个答案:

答案 0 :(得分:3)

默认情况下,您的元素将作为参考存储在EHCache中,直到出现文件写入或其他复制。为了防止您使用“copyOnWrite”&#39; copyOnRead&#39;缓存配置中的属性。因此,对象将被复制到您的put / get操作中,并且不允许任何突变。

Ehcache documentation for reference

答案 1 :(得分:0)

(这可能不是理想的解决方案,仅提供另一种选择)

添加到@Alexey的答案.. 如果您只有几个可能发生突变的场景,您可以在从EHCache检索后选择克隆该对象。这可以节省每次复制它的一些开销。