如何防止持久更新持久化对象?

时间:2011-09-02 04:16:42

标签: grails gorm

我有一个Load班级和一个Cargo班级。 Load的实例包含Cargo的实例。

class Load {
    Cargo cargo
}

class Cargo {
    String name
    BigDecimal cost
}

让我们说name实例的Cargo是“摇滚”而cost是“11.11”。现在,我使用此Cargo实例创建Load的实例。既然已经创建了Load的实例,我不希望它的“货物”发生变化。例如,如果我将“摇滚”的价格更改为“22.22”,我不希望Load实例中“货物”的价格发生变化。处理这种情况的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

好吧,如果每个加载只能有一个货物(根据您的示例),您需要将<{1}}属性添加到< EM>负载的。然后,您需要在创建对象时复制成本。您可以通过Load对象中的重载方法执行此操作,或者只编写自己的方法将 Cargo 添加到 Load

如果您实际上每加载需要多个 Cargoes ,那么您将需要一个中间对象来表示连接。此对象将在关联时存储价格。这可能看起来像:

cost

当然,由于与Cargo的间接关系,你的对象模型会有点复杂。

修改的 处理多重相关情况的另一种方法是每次更新成本时复制货物。如果您期望class Load { LoadCargo loadCargo } class LoadCargo { Cargo cargo BigDecimal cost } class Cargo { String name BigDecimal cost } 主要是静态的,那么这可能会更有效。我通过添加一个“禁用”项目来处理这个问题,如下所示:

cost

我相信您可以简单地克隆货物更新,如下所示:

class Cargo {
    String name
    BigDecimal cost
    boolean active = true
}

这只是一个猜测,它可能已经坏了。