0

Hibernate 3.x で JPA 2 を使用しています。2 つの Entity オブジェクト Foo と Bar があり、関係は次のようになります -

@Entity
public class Foo{
    @Id
    private long id;

    @OneToOne(cascade = CascadeType.ALL )
    @JoinColumn(name = "bar")
    private Bar bar;

    @Version
    private int version; 
}

@Entity
public class Bar{
    @Id
    private long id;

    private String name;

    @Version
    private int version; 
}

今、私の問題は、好きなものをロードして更新した場合、HibernateFooentityManager.find(...)更新を開始し、バージョンのみをインクリメントすることです。オブジェクトの観点からは、Foo の状態も変化しないので、Foo のバージョンもインクリメントするべきではありませんか? ここで、からプロパティ を削除したいと思います。また、更新された場合はインクリメントする必要があります。どうすればこれを達成できますか?nameBarfoo.getBar().setName("someAnotherName");entityManager.merge(foo)BarBar

versionBarversionFooBar

4

1 に答える 1

3

あなたの場合、Fooではなく、それが参照するエンティティが変更されているため、バージョンをインクリメントする必要はありません。

@Versionは、エンティティに楽観的ロック機能を追加するため、変更カウンターとして使用しないでください。このアノテーションの主な目的は、競合する更新を検出することです。そのため、それを行う前によく考えてください。

この動作をオーバーライドする唯一の方法は、[OPTIMISTIC | PESSIMISTIC] _FORCE_INCREMENT

于 2011-02-24T20:35:12.720 に答える