次の要件を満たすHibernate IDジェネレータを使用することにしました。 - ドメインが異なるアプリケーション(異なるJVM)からアクセスされるときの安全なID生成 - ID間隔を使用しますデータベースに新しいIDが必要になるたびに)私は2休止強化識別子ジェネレータのいずれかを選択し、いくつかの調査の後Hibernate。拡張識別子ジェネレータ
、それは
ですorg.hibernate.id.enhanced.TableGenerator
問題は、このアルゴリズムは次の値が利用可能ではなく、次の利用可能な区間の終わりをデータベースに保持することです。つまり、私がIDを要求したときにincrement_size 10のIDジェネレータがあるとしましょう。 1 - 10ですが、データベースには値11ではなく21が格納されます。この動作では、特定のテーブルにマップされているすべてのクラスに沿ってincrement_sizeを同じに保つ必要があります。なぜこの動きがあるのですか?これを修正する方法はありますか?
特定のテーブルへのエンティティマッピングは1つだけにしてください。 –
@JBNizet:継承のために複数のマッピング/クラスが同じデータベーステーブルを指し示すことができる状況があります。 –
継承はルートエンティティで定義されたジェネレータを使用します。したがって、実際には有効ではありません。そして、一般的に私は人々が一歩後退して、サロゲート*キーの全目的を考える必要があると思います。定義上、値はビジネス上の意味を持たないはずですから、なぜあなたは気にしますか? –