Java JPA:设置@JoinColumn(updateable=false)以避免OptimisticLockException
鉴于以下情况,以下两个实体Java JPA:设置@JoinColumn(updateable=false)以避免OptimisticLockException,java,jpa,optimistic-locking,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
@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
}
两个问题:
我的情况是,实体B非常频繁地更新,A只是偶尔更新,但只更新其基本属性(而不是关系),并且我在实体A上得到了一个OptimisticLockException。如果只更改B,则无法在A上得到锁定错误 你只会在B上得到一个锁错误
检查SQL日志以了解您实际执行的操作。我不确定默认的锁定类型,但您是否尝试过摆弄锁定模式(
OPTIMISTIC
vsOPTIMISTIC\u FORCE\u INCREMENT
)?我认为默认情况下是乐观的。我认为这与此无关,因为只有在显式使用实体管理器的锁API时才能指定锁模式,而我没有。我只有一个@Version字段。B和a都已更新。但B中的更新并没有触及其关系A。