【发布时间】:2011-01-02 14:12:57
【问题描述】:
我们已经为我们的 J2EE 应用程序创建了一个缓存层。在本例中,我们使用 Ehcache。这带来了一些挑战。
让我们举这个例子。
OrderItem orderitem = cache.getOrderItemByID("id");
OrderItem old_orderitem = cache.getOrderItemID("id");
orderitem.setStatus(1);
old_orderitem.setStatus(2);
如果我们不小心,对其中任何一个对象所做的任何更改都会影响另一个(它们引用同一个对象)。将 orderitem 保存回数据库将使其具有 status=2
我们如何以最好的方式解决这个问题?
我们尝试为每个对象创建一个 .copyObject() 方法。它只是创建一个新对象并设置所有值。但这似乎不是一个好的解决方案。
这个例子只是为了说明。代码远比这复杂,但结果是一样的。
**********************更新 15.07.2010 ********************* ***********************************
在 EHCache 2 中有一些选项可以打开 copyRead() 和 copyWrite()。这解决了我所有的问题:)
【问题讨论】:
-
如果它们在逻辑上是相同的订单,为什么你不希望对一个对象的更改影响另一个?如果两个 Order 对象都保存在同一个数据库记录中,那么其中一个无论如何都会覆盖另一个。
-
正如我所说,它比这个简单的例子要复杂一些。就像我更新 OrderItem 时一样,我想将旧的 OrderItem 保存到另一个具有不同状态的表中,而新的则具有另一种状态。
标签: java object reference pass-by-reference pass-by-value