JPA: установка @JoinColumn (updatable = false), чтобы избежать OptimisticLockException - PullRequest
2 голосов
/ 16 ноября 2011

С учетом следующих двух сущностей

@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 объединяется с БД (обратите внимание, что нет CascadeType.MERGE определяется по отношению к A) и, таким образом, вызывает возможное OptimisticcLockException, когда A объединяется с другой номер версии?

  2. Если да, поможет ли это избежать вероятности OptimisticLockException, если я добавлю @JoinColumn(updatable=false) на отношения?

Моя ситуация такова, что сущность B обновляется очень часто, а A время от времени, но только ее основные атрибуты (не взаимосвязь), и я получаю исключение OptimisticLockException для сущности A.

1 Ответ

1 голос
/ 16 ноября 2011

Если вы измените только B, вы не сможете получить ошибку блокировки на A.

Вы получите только ошибку блокировки на B.

Проверьте ваш журнал SQL на то, что вы на самом деле делаете.

...