在消息驱动的 bean 中,我将条目持久保存到具有唯一条目的查找表中。基本上我使用标准 api 创建一个选择语句,如果我没有找到一个条目,我创建一个。
目前此代码遇到 mysql 错误,因为在某些情况下,此条目创建 ( em.persist(entry)
) 会违反我数据库上的唯一约束。我的 mdb 的另一个实例在我没有找到它并且在我创建它之前创建了查找条目。
我该如何处理这个同步问题,所以仍然只有一个条目?
在消息驱动的 bean 中,我将条目持久保存到具有唯一条目的查找表中。基本上我使用标准 api 创建一个选择语句,如果我没有找到一个条目,我创建一个。
目前此代码遇到 mysql 错误,因为在某些情况下,此条目创建 ( em.persist(entry)
) 会违反我数据库上的唯一约束。我的 mdb 的另一个实例在我没有找到它并且在我创建它之前创建了查找条目。
我该如何处理这个同步问题,所以仍然只有一个条目?
您需要使用SELECT FOR UPDATE或以不同的方式确保唯一性(例如在 Java 中生成条目的唯一部分)。
Hibernate 支持悲观锁,我认为这只是同一事物的另一个名称。