使用预先加载的参数和OptimisticLockException保存对象

时间:2017-04-12 15:17:07

标签: java multithreading hibernate jpa optimistic-locking

我有一个名为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吗?

1 个答案:

答案 0 :(得分:0)

实际上,此处发生的并发问题导致了optimisticException。你不是在单独的会话中做这个更新?就像在一个事务或会话中一样,您更新该对象中的女孩,在第二个事务或会话中,您获取行并更新男孩的字段。请考虑这个