在我在同一个表中的一个并发插入操作中,我得到了ConstraintViolationException。
javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException:
could not insert:
Hibernate Optimistic Lock可以在这方面帮助我吗? 据我所知,乐观锁定在数据库中相同记录的更新/删除操作中工作。
它是否也适用于插入查询?
我在目标表(实体)中创建了一个版本列。但仍然得到相同的异常(没有optimisticLockException或StaleObjectStateException)。
答案 0 :(得分:2)
乐观锁定用于防止用陈旧数据覆盖现有数据。由于您无法用另一个插入覆盖一个插入,因此执行乐观锁定检查没有意义,因为数据库已经抛出了自己的异常 - 一个ConstraintViolation异常。如果插入失败,则可以从flush或commit中获取PersistenceException。您可以将JPA提供程序配置为在调用persist时抛出EntityExistsException(如果已经插入),除非您已经将其保持为persist,在这种情况下您可能会遇到https://hibernate.atlassian.net/browse/HHH-4131