0

私はopenjpaとjpaを試しています。私が持っているのは、データベース内の対応するテーブルとして 1 つのエンティティ クラスだけです。エンティティの属性の 1 つはユーザー名であり、db テーブルの対応する行には varchar2(20) があります。私の主な方法では、私が永続化しようとしたものと、ユーザー名が20を超えるエンティティのインスタンスです。私がやっているのは

em.getTransaction().begin();
em.persist(entity); //entity here is the instance with the username longer than 20
em.getTransaction().commit();

他の種類の例外を取得することを期待してこれを試しましたが、なぜ楽観的クロック例外が発生するのかわかりません。

ロック設定はありません。つまり、プロパティをロックするためにデフォルト値を使用しています。

ここで何が起こっているか知っている人はいますか?

4

1 に答える 1

0

なぜこれが起こるのかわかりません... OptimisticLockException が奇妙なケースでスローされる可能性があることに気付きました...

テーブルとエンティティにバージョン フィールドを追加すると、多くの場合、OpenJPA のロック機能が向上します...

エンティティ Bean にこれを追加します (VERSION という名前の列もテーブルに追加します)。

private Long version;
@Version
@Column(name="VERSION") 
public Long getVersion() {
    return version;
}
public void setVersion(Long version) {
    this.version = version;
}

お役に立てれば...

于 2011-03-11T19:16:41.140 に答える