重複の可能性:
同じ JPA クラスに対する複数のデータベースのサポート
私はテーブルを持っています
ユーザー(ID、名前);
両方のデータベースをサポートできるように、テーブルの JPA クラスを作成したいと思います。
ID は自動インクリメントにする必要があります。
いくつかの例を提供して、同じことを達成するのを手伝ってください。
前もって感謝します。
重複の可能性:
同じ JPA クラスに対する複数のデータベースのサポート
私はテーブルを持っています
ユーザー(ID、名前);
両方のデータベースをサポートできるように、テーブルの JPA クラスを作成したいと思います。
ID は自動インクリメントにする必要があります。
いくつかの例を提供して、同じことを達成するのを手伝ってください。
前もって感謝します。
最も移植性の高いGenerationType.TABLEに直接移動するだけです。値の増分は SQL を介して行われるため、データベースの仕様にはあまり依存しません。また、同じ生成タイプがデータベース プロバイダーから独立して使用されるため、AUTO よりも適していると思います。TableGeneratorなしで使用することもできますが、すべてのデータベースでまったく同じように機能させることが目標であるため、必要な値を明示的に指定しています。
あなたの場合、マッピングは次のとおりです。
@Entity
@TableGenerator(
name="usersGenerator",
table="ID_GENERATOR",
pkColumnName="GENERATOR_KEY",
valueColumnName="GENERATOR_VALUE",
pkColumnValue="USERS_ID",
initialValue = 1,
allocationSize=1)
public class Users {
@Id
@GeneratedValue(strategy= GenerationType.TABLE,
generator = "usersGenerator")
private Integer value;
private String name;
protected Integer getValue() {
return value;
}
protected void setValue(Integer value) {
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
同じデータベース テーブル (この場合は ID_GENERATOR) を複数のテーブル ジェネレーターで使用できます。必要に応じて、たとえば ID のタイプが原因で、同じテーブルに複数の pk および value 列を格納できます。
一般的なジェネレータ名と同様に、TableGenerator の名前は永続化ユニットに対してグローバルです。必要に応じて、注釈を id 属性に配置することもできます。
考えられる警告: 私の記憶が正しければ、一部の休止状態バージョンの組み合わせは初期値をサポートしていません。これは一般に、移植性を制限するものではありません。テーブルを自動生成し、まったく同じ一連の id 値を再現する必要がある場合にのみ問題になります。回避策は、テーブルの作成後に初期値を手動で挿入することです。
発電機タイプ
インクリメント
This generator supports in all the databases, database independent
This generator is used for generating the id value for the new record by using the
順序
Not has the support with MySql
This generator class is database dependent it means, we cannot use this generator class for all the database, we should know whether the database supports sequence or not before we are working with it
このリンクを参照してください、それはあなたに役立つかもしれません。
生成タイプAUTOを選択する必要があります。.hbmマッピングのみを使用しましたが、アノテーションを使用すると、次のようになります。
@Entity
public class Employee {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;