【发布时间】:2013-05-16 15:57:54
【问题描述】:
我认为我有一个相当简单的任务,即在根据某些条件向表中添加新记录时手动递增 ID。
假设我有表 Book 和 Chapter。 Chapter 具有自动递增的 ChapterId、BookId 的外键和 ChapterNo。每次我向书中添加章节时,我都希望 ChapterNo 为该章节所属的特定书籍增加一。
可以通过简单的SQL语句来完成:插入章节(BookId, ChapterNo)值(XXX, select max(ChapterNo) + 1 from chapter where BookId = XXX)。但是有没有办法在 JPA 中做到这一点并避免竞争条件(如果我先阅读 max ChapterNo 然后插入,就会发生这种情况)
更新:到目前为止我想出的唯一合理的解决方案:实现负责递增 ChapterNo 的 DB 触发器。那么至少我在 JPA 端不需要任何本机查询
【问题讨论】:
-
我认为您应该能够通过使用事务和悲观锁定来防止其他人同时插入一章来做到这一点。我知道 JPA 支持悲观锁定,但我不知道细节。
标签: mysql jpa race-condition