タグ付けされた質問 「hilo」

5
Hi / Loアルゴリズムとは何ですか?
Hi / Loアルゴリズムとは何ですか? これはNHibernateのドキュメントで見つかりました(一意のキーを生成する1つの方法、セクション5.1.4.2です)が、それがどのように機能するかについての適切な説明は見つかりませんでした。 私はNhibernateがそれを処理することを知っており、内部を知る必要はありませんが、興味があるだけです。

6
Hibernate、@ SequenceGenerator、allocationSize
使用時のHibernateのデフォルトの動作は誰でも知っています@SequenceGenerator-実際のデータベースシーケンスを1増やし、この値を50(デフォルトallocationSize値)倍します-そして、この値をエンティティIDとして使用します。 これは不正な動作であり、次の仕様と競合します。 allocationSize-(オプション)シーケンスからシーケンス番号を割り当てるときに増分する量。 明確にするために:生成されたID間のギャップについては気にしません。 基になるデータベースシーケンスと一致しない IDに関心があります。たとえば、他のアプリケーション(プレーンなJDBCを使用するなど)は、シーケンスから取得したIDの下に新しい行を挿入したい場合がありますが、これらの値はすべてHibernateですでに使用されている場合があります。狂気。 誰かがこの問題の解決策を知っていますか(設定allocationSize=1してパフォーマンスを低下させることなく)? 編集: 物事を明確にするために。最後に挿入されたレコードにID =があった1場合、HBは51, 52, 53...新しいエンティティの値を同時に使用しますが、データベース内のシーケンスの値はに設定され2ます。これは、他のアプリケーションがそのシーケンスを使用しているときに簡単にエラーにつながる可能性があります。 反対に、仕様では、(私の理解では)データベースシーケンスが設定されている必要が51あり、その間HBは範囲の値を使用する必要があると述べています 2, 3 ... 50 更新: Steve Ebersoleが以下で述べたように:私が説明した動作(および多くの人にとって最も直感的な動作)は、を設定することで有効にできますhibernate.id.new_generator_mappings=true。 皆さんに感謝します。 更新2: 将来の読者のために、実際の例を以下に示します。 @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USERS_SEQ") @SequenceGenerator(name = "USERS_SEQ", sequenceName = "SEQUENCE_USERS") private Long id; } persistence.xml <persistence-unit …
117 java  hibernate  jpa  hilo 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.