0

現在、MSSQL から Oracle に移行しており、すべてのテーブルに hibernate_sequence を使用したくありません。各テーブルには独自のシーケンスが必要です。

私たちはすでにテスト環境で変更を行っていますが、私たちのソリューションが安全に使用できるかどうか、追加情報を入手したいと思います..

ほとんどのクラスは baseentities から拡張されていますが、いくつかのスタンドアロン エンティティもあります。

変更点:

-baseentities(@MappedSuperclass):   
changed: @GeneratedValue(strategy = GenerationType.AUTO)   
to: @GeneratedValue(strategy = GenerationType.AUTO, generator = "HIBERNATE_GENERATOR")

-拡張エンティティ:

added after the @Table annotation:  
@SequenceGenerator(name = "HIBERNATE_GENERATOR", sequenceName = "${TABLENAME}_SEQ")

-スタンドアロン エンティティ:
@Table 注釈の後に追加:

@SequenceGenerator(name = "HIBERNATE_GENERATOR", sequenceName = "${TABLENAME}_SEQ")
changed : @GeneratedValue(strategy = GenerationType.AUTO)   
to: @GeneratedValue(strategy = GenerationType.AUTO, generator = "HIBERNATE_GENERATOR")

そのため、常に同じジェネレーター名 "HIBERNATE_GENERATOR" を使用していますが、sequenceNames のみが異なります。私たちのアプリケーションは正常に動作しているように見えますが、常に同じジェネレーター名を使用しても安全ですか?

4

1 に答える 1

1

いいえ、安全ではありません。私の推測では、生成された値はすべて同じシーケンスによって生成されます。実際、javadoc は次のように述べています。

GeneratedValue アノテーションにジェネレーター要素が指定されている場合に、名前で参照できる主キー ジェネレーターを定義します。シーケンス ジェネレーターは、エンティティ クラスまたは主キー フィールドまたはプロパティで指定できます。ジェネレーター名のスコープは、(すべてのジェネレーターの種類にわたって) 永続化ユニットに対してグローバルです。

(私のものを強調)

各エンティティは、独自のジェネレータを定義する必要があります。

于 2013-03-10T10:57:09.763 に答える