我已经使用@version注释实现了一个简单的实体ejb。我希望每次更新实体后版本号都会增加。
@Version
public Integer getVersion() {
return version;
}
public void setVersion(Integer version) {
this.version = version;
}
但这似乎没有像预期的那样奏效。 此外,每当我读取实体时,版本号会自动增加(!?)。我希望版本只会在提交后增加?
有人可以解释为什么我的版本在读取时也会增加吗?
答案 0 :(得分:4)
最后我发现了这种奇怪行为的原因。 在我将所有值从我的(仍然附加的)实体复制到分离的域模型对象的方法中会出现问题。这一切都运行良好,因为我读了一个附加实体,包含一个复杂的数据结构(一个包含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);