2

次の例は、mysql 5.x を使用している場合は機能しますが、Oracle 10g データベースを使用している場合は機能しません。

データベース技術に依存しない一意の識別子フィールドを定義する方法はありますか?

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private long id;

これを休止状態でテストしたところ、Oracle を使用している場合にのみ次の例外が発生します。

org.hibernate.MappingException: Dialect does not support identity key generation
4

2 に答える 2

4

データベース テーブルの使用は、識別子を生成する移植可能な方法です。

テーブルを使用して識別子を生成する最も簡単な方法はTABLE、生成戦略として指定することです。

@Id
@GeneratedValue(strategy=GenerationType.TABLE)
@Column(name="id")
private long id;

スキーマ生成を使用している場合、プロバイダーは既定のテーブルを作成します。そうでない場合は、既存のテーブルを指定する必要があります。

@TableGenerator(name="InvTab",
    table="ID_GEN",
    pkColumnName="ID_NAME",
    valueColumnName="ID_VAL",
    pkColumnValue="INV_GEN")
@Id 
@GeneratedValue(generator="InvTab")
@Column(name="id")
private long id;

http://www.oracle.com/technology/products/ias/toplink/jpa/howto/id-generation.html#table

于 2010-08-04T15:44:41.567 に答える
0

私は使用して調査しGenerationType.AUTOましたが、それはより良いオプションのようです. これにより、JPA 実装は、使用しているデータ ストレージ システムに最適なものを選択できます。

于 2010-08-07T14:15:42.157 に答える