我有一个名为Classroom的对象:
@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;
}
现在,假设我有两个线程,它们都保存有关“课堂”的信息并在必要时更新对象。其中一个主题是使用有关女孩的信息更新对象,另一个是使用有关男孩的信息更新对象。
想象一下两个线程同时访问同一个Classroom条目。线程使用ClassroomRepository.save(classRoom)
调整适当的InformationObject并将对象存储在数据库中。如果延迟加载InformationObjects,我可以阻止OptimisticLockException吗?
答案 0 :(得分:0)
实际上,此处发生的并发问题导致了optimisticException。你不是在单独的会话中做这个更新?就像在一个事务或会话中一样,您更新该对象中的女孩,在第二个事务或会话中,您获取行并更新男孩的字段。请考虑这个