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 に答える