我们有一个使用@Version
的实体类。
@Version
protected Long auditVersion;
如果有两个线程都试图插入第一次出现的实体怎么办?实体的两个实例都将auditVersion
设置为null
。似乎Hibernate没有注意到乐观锁定失败,我没有得到我预期的StaleObjectStateException
。
为什么不呢?
答案 0 :(得分:4)
因为乐观锁定用于处理并发更新和删除。如果两个线程尝试插入具有相同ID的两个实体,则主键上的唯一约束足以检测冲突。不需要乐观锁定。