2013-04-02 40 views
0

在我的一個併發插入操作在同一個表中,我得到了ConstraintViolationException。Hibernate樂觀鎖定用於併發插入 - 可能嗎?

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

Hibernate樂觀鎖可以在這方面幫助我嗎? 據我所知,樂觀鎖定工作在數據庫中同一記錄上的更新/刪除操作。

它是否也適用於插入查詢?

我在目標表(實體)中創建了一個版本列。但仍然得到相同的異常(沒有optimisticLockException或StaleObjectStateException)。

回答

1

樂觀鎖定用於防止用陳舊數據覆蓋現有數據。由於你不能用另一個插入覆蓋一個插入,所以執行樂觀鎖定檢查沒有意義,因爲數據庫已經拋出了它自己的異常 - 一個ConstraintViolation異常。如果插入失敗,PersistenceException是您可以從刷新或提交中獲得的所有內容。您可能能夠配置您的JPA提供程序在調用persist時拋出一個EntityExistsException(如果它已經被插入),除非您已將此持續存在,在這種情況下您可能正在觸碰https://hibernate.atlassian.net/browse/HHH-4131