Java 使用已加载的参数和OptimisticLockException保存对象
我有一个叫做教室的物体:Java 使用已加载的参数和OptimisticLockException保存对象,java,multithreading,hibernate,jpa,optimistic-locking,Java,Multithreading,Hibernate,Jpa,Optimistic Locking,我有一个叫做教室的物体: @Entity public class Classroom { @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST }) @JoinColumn(name = "girl", referencedColumnName = "id", nullable = true) private GirlsInformationObject girl; @Many
@Entity
public class Classroom {
@ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST })
@JoinColumn(name = "girl", referencedColumnName = "id", nullable = true)
private GirlsInformationObject girl;
@ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST })
@JoinColumn(name = "boy", referencedColumnName = "id", nullable = true)
private BoysInformationObject boy;
}
现在,假设我有两个线程,它们都保存有关教室的信息,并在必要时更新对象。其中一个线程用女孩的信息更新对象,另一个线程用男孩的信息更新对象
想象两个线程同时访问同一个教室条目。线程使用
ClassroomRepository.save(教室)
调整适当的InformationObject并将该对象存储在数据库中。如果InformationObjects将被延迟加载,我可以防止OptimisticLockException吗?实际上,这里出现的并发问题会导致optimisticException。您不在单独的会话中执行此更新吗?与在一个事务或会话中一样,更新该对象中的女孩,在第二个事务或会话中,获取行并更新男孩字段。请考虑这个问题是如果我可以通过简单地将类型设置为<代码> FETCHYTYPE。EXPRESS ,因为它不是被更新的对象。