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

发布于 2024-11-01 04:15:00 字数 239 浏览 1 评论 0原文

在消息驱动的 bean 中,我将条目保留到具有唯一条目的查找表中。基本上,我使用标准 api 创建一个选择语句,如果找不到条目,​​我会创建一个条目。

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

我该如何处理这个同步问题,所以仍然只有一个条目?

in a message driven bean i persist entries to lookup-table with unique entries. Basicly i create a select statement with the criteria api and if i don't find an entry, i create one.

Currently this code is running into mysql errors because in certain cases this entry creation (em.persist(entry)) would violate the unique constrain on my database. another instance of my mdb created the lookup entry after i didn't find it and before i could create it.

How can i handle this synchronization problem, so there still is only one entry?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

熊抱啵儿 2024-11-08 04:15:00

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

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

You need to use SELECT FOR UPDATE or ensure uniqueness differently (e.g. generating unique part of the entry inside Java).

Hibernate supports pessimistic locks which I believe is just another name for the same thing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文