可以使用Hibernate乐观锁定并发插入?

时间:2013-04-02 10:21:18

标签: hibernate jpa

在我在同一个表中的一个并发插入操作中,我得到了ConstraintViolationException。

javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: 
could not insert:

Hibernate Optimistic Lock可以在这方面帮助我吗? 据我所知,乐观锁定在数据库中相同记录的更新/删除操作中工作。

它是否也适用于插入查询?

我在目标表(实体)中创建了一个版本列。但仍然得到相同的异常(没有optimisticLockException或StaleObjectStateException)。

1 个答案:

答案 0 :(得分:2)

乐观锁定用于防止用陈旧数据覆盖现有数据。由于您无法用另一个插入覆盖一个插入,因此执行乐观锁定检查没有意义,因为数据库已经抛出了自己的异常 - 一个ConstraintViolation异常。如果插入失败,则可以从flush或commit中获取PersistenceException。您可以将JPA提供程序配置为在调用persist时抛出EntityExistsException(如果已经插入),除非您已经将其保持为persist,在这种情况下您可能会遇到https://hibernate.atlassian.net/browse/HHH-4131