1

我已经实现了一个带有 @version 注释的简单实体 ejb。我希望每次更新实体后版本号都会增加。

@Version
public Integer getVersion() {
    return version;
}
public void setVersion(Integer version) {
    this.version = version;
}

但这似乎没有按预期工作。此外,每次我读取实体时,版本号都会自动增加(!?)。我希望版本只在提交后增加?

谁能解释为什么我的版本在阅读时也会增加?

4

1 回答 1

5

最后我找到了奇怪行为的原因。问题发生在我将所有值从我的(仍然连接的)实体复制到分离的域模型对象的方法中。这一切都很好,因为我读取了一个包含复杂数据结构的附加实体(一个包含 HashMaps 的向量)。我使用 List 接口中的 .addAll 方法复制了这些值:

List activePropertyValue = (List)mapEntry.getValue();
// value contains HashMaps!
List detachePropertyValue = new Vector();
detachePropertyValue.addAll(activePropertyValue);

但似乎这改变了附加实体数据属性的哈希值。所以在数据库中更新了所有实体之后,版本号增加了。

我通过在复制所有值之前分离实体解决了这个问题:

manager.detach(aEntity);
.....
List activePropertyValue = (List)mapEntry.getValue();
// value contains HashMaps!
List detachePropertyValue = new Vector();
detachePropertyValue.addAll(activePropertyValue);
于 2012-06-20T21:28:52.590 回答