1

複数のデータベースをサポートし、その要件を満たす休止状態のアプリケーションを開発しています。

現在、問題はプライマリ自動生成キーにあります。一部のデータベースは、自動インクリメントと ID のインクリメントに必要なシーケンスをサポートしています。この問題を解決するには、次の戦略を使用します

strategy = GenerationType.TABLE (javax.persistence)

これは私の要件を満たしています。

この投稿では、ユーザーのコメントは

IDを順番に並べる必要がある場合は、テーブル生成の代わりにインクリメントまたはシーケンスを使用することを常にお勧めします

自動インクリメントまたはシーケンスを使用する場合、あるデータベースを別のデータベースに移動するときに、注釈レベルでいくつかの変更が必要であることを意味します (余分な負担)

update me 、テーブル生成の代わりにインクリメントまたはシーケンスを使用する方が本当に良いですか、それとも単なるステートメントですか?

4

1 に答える 1

0

自動インクリメントの欠点: トランザクションがコミットされるまで ID がわからない (一部の EntityManager 操作は ID に依存しているため、JPA では問題になる可能性があります)。すべてのデータベースが自動インクリメント フィールドをサポートしているわけではありません。

シーケンスの欠点: すべてのデータベースにシーケンスがあるわけではありません。

テーブルの欠点: ID は必ずしも連続しているとは限りません。

ID が不足する可能性はほとんどないため、テーブル生成を使用することは引き続き適切なオプションです。より連続した ID を使用するために、ID の割り当てサイズを微調整することもできます (デフォルトのサイズは 50 です)。

@TableGenerator(name="myGenerator", allocationSize=1)

ただし、これにより、挿入ごとに id 割り当てテーブルに対して少なくとも 2 つのクエリが発生します。

于 2013-04-29T21:49:45.897 に答える