2

次の 2 つのエンティティがあるとします。

@Entity
public class A {
  @Version
  protected int version;

  String basicPropertey;

  // getter and setter for basicProperty
}

@Entity
public class B {
  @Version
  protected int version;

  @ManyToOne
  private A a;

  public B(A a) {
    this.a = a}
  }

  //getter for a
}

2 つの質問:

  1. エンティティ B が DB にマージされるたびにエンティティ A のバージョン番号が増加するか (A との関係で CascadeType.MERGE が定義されていないことに注意してください)、したがって、A が別のエンティティとマージされると OptimisticcLockException が発生する可能性があります。バージョンナンバー?

  2. はいの場合@JoinColumn(updatable=false)、関係を追加すると OptimisticLockException の可能性を回避するのに役立ちますか?

私の状況では、エンティティ B は非常に頻繁に更新され、A は散発的に更新されますが、その基本的な属性 (関係ではない) のみが更新され、エンティティ A で OptimisticLockException が発生します。

4

1 に答える 1

1

Bのみを変更した場合、Aでロックエラーが発生することはありません。

Bでのみロックエラーが発生します。

実際に行っていることに対するSQLログを確認してください。

于 2011-11-16T17:03:09.900 に答える