Ral*_*lph 1 jpa optimistic-locking optimistic-concurrency
我已经实现了一个带有 @version 注释的简单实体 ejb。我希望每次更新实体后版本号都会增加。
@Version
public Integer getVersion() {
return version;
}
public void setVersion(Integer version) {
this.version = version;
}
Run Code Online (Sandbox Code Playgroud)
但这似乎没有按预期工作。此外,每次读取实体时,版本号都会自动增加(!?)。我希望版本只会在提交后增加?
有人可以解释为什么我的版本在读取时也会增加吗?
最后我找到了奇怪行为的原因。问题发生在我将所有值从我的(仍然附加的)实体复制到分离的域模型对象的方法中。这一切都很好,因为我读取了一个包含复杂数据结构(包含 HashMap 的向量)的附加实体。我使用 List 接口中的 .addAll 方法复制了这些值:
List activePropertyValue = (List)mapEntry.getValue();
// value contains HashMaps!
List detachePropertyValue = new Vector();
detachePropertyValue.addAll(activePropertyValue);
Run Code Online (Sandbox Code Playgroud)
但这似乎改变了附加实体数据属性的哈希值。所以毕竟实体在数据库中更新了,版本号增加了。
我通过在复制所有值之前分离实体解决了这个问题:
manager.detach(aEntity);
.....
List activePropertyValue = (List)mapEntry.getValue();
// value contains HashMaps!
List detachePropertyValue = new Vector();
detachePropertyValue.addAll(activePropertyValue);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1302 次 |
| 最近记录: |