いくつかの条件に基づいて、新しいレコードをテーブルに追加するときに ID を手動でインクリメントするというかなり単純なタスクがあると思います。
テーブル Book と Chapter があるとします。チャプターには、自動インクリメントする ChapterId、BookId および ChapterNo への外部キーがあります。そして、ブックに章を追加するたびに、この章が属する特定のブックの ChapterNo を 1 ずつ増やします。
これは単純な SQL ステートメントで実行できます: 章 (BookId, ChapterNo) 値 (XXX、BookId = XXX の章から max(ChapterNo) + 1 を選択) に挿入します。しかし、JPAでそれを行い、競合状態を回避する方法はありますか(max ChapterNoを最初に読んでから挿入を行うと発生します)
更新: これまでに思いついた唯一の合理的な解決策: ChapterNo のインクリメントを処理する DB トリガーを実装します。次に、少なくともJPA側でネイティブクエリは必要ありません