如何使用JPA / Hibernate处理数据库中具有唯一约束的多线程插入?

时间:2011-04-15 10:47:08

标签: hibernate jpa jboss synchronization message-driven-bean

在消息驱动的bean中,我将条目持久化到具有唯一条目的lookup-table。基本上我用条件api创建一个select语句,如果我没找到条目,我创建一个。

目前此代码遇到mysql错误,因为在某些情况下,此条目创建(em.persist(entry))将违反我的数据库中的唯一约束。我的mdb的另一个实例在我找不到它之前创建了查找条目,然后我才能创建它。

如何处理此同步问题,因此仍然只有一个条目?

1 个答案:

答案 0 :(得分:1)

您需要使用SELECT FOR UPDATE或以不同方式确保唯一性(例如,在Java中生成条目的唯一部分)。

Hibernate支持pessimistic locks,我认为这只是同一事物的另一个名称。