JPA:设置@JoinColumn(updatable = false)以避免OptimisticLockException

时间:2011-11-16 12:12:14

标签: java jpa optimistic-locking

鉴于以下两个实体

@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
}

两个问题:

  1. 每次实体A的版本号都会增加 实体B合并到DB(注意没有 CascadeType.MERGE定义了与A)的关系,因而导致了 A与a合并时可能出现的OptimisticcLockException 不同的版本号?

  2. 如果是的话,是否有助于避免出现问题 如果我在上添加@JoinColumn(updatable=false),则为OptimisticLockException 关系

  3. 我的情况是实体B经常更新和偶尔更新,但只有它的基本属性(不是关系),我在实体A上得到一个OptimisticLockException。

1 个答案:

答案 0 :(得分:1)

如果您只更改B,则无法在A上获得锁定错误。

您只会在B上遇到锁定错误。

检查SQL日志,了解您实际在做什么。