3

テストには、H2 データベースを使用しています。

本番環境ではMySQLです。

AUTO_INCREMENT両方とも( mysql / h2 )をサポートしていることは理解していますが、Hibernate はこのようには機能しないようです。

identityは MySQL でサポートされています。罰金。
H2はどうですか?独自のジェネレーターを作成する必要がありますか...? (org.hibernate.id.IdentifierGeneratorドキュメントが言うようにインターフェースを使用します)。

アプリケーションがクラスター内にあるため(つまり、一度に複数のサーバーがデータベースに接続されlongているため)、データベース自体から(ちなみにタイプの)IDを取得するためのクリーンで迅速な方法が必要です...そのため、絶対にそうではありません自分。INSERTincrement

ありがとう!

4

2 に答える 2

5

@GeneratedValue で生成された値を必要とする id プロパティに注釈を付けるだけです。これにより、使用しているデータベースに適した生成戦略が自動的に選択されます。詳細については、を参照GenerationType.AUTOしてください。

プロパティは次のようになります。

@Id
@GeneratedValue
private long id;
于 2012-06-28T15:56:48.457 に答える
2

たとえば、ネイティブジェネレーターを使用します

<id name="id" type="int">
    <column name="id_column" />
    <generator class="native" >
        <param name="sequence">id_column_sequence</param>
    </generator>            
</id>

クラスのジェネレーターはnative、データベースに最適な生成戦略を使用します。MySql の場合、これは auto_increment であり、Oracle の場合、これはシーケンスです (H2 の場合もシーケンスである必要がありますが、H2 を使用していないため、試したことはありません)。generator パラメーターsequenceは、有用な場合にのみ使用されます。つまり、MySql データベースではパラメーターは無視され、Oracle では使用されます。

そのようにして、異なるデータベース タイプに対して同じマッピング ファイルを使用できます (少なくとも、テーブルと列の名前が同じである限り)。

于 2012-06-29T06:28:14.637 に答える