2011-04-04 8 views
0

私は、自動IdGeneration戦略を持つエンティティを持ちたいと思っています。OracleとMySQLの両方で動作する必要があり、Oracleの場合はそれぞれのエンティティのシーケンス名を指定する必要があります。JPA IdGeneration strategy AUTO

私は主キーに注釈をつけるとき:

@Id 
@Column(name="id") 
@GeneratedValue(strategy= GenerationType.AUTO, generator="sequence") 

私はシーケンスジェネレータが不明であることのMySQLのエラーを持っています。

と私は

@Id 
@Column(name="id") 
@GeneratedValue(strategy= GenerationType.AUTO) 

を使用する場合、私は、各テーブルの列名を指定することはできません。 この問題を解決する方法ですか?私は私のJPAプロバイダ

答えて

0

ようにHibernateを使用

あなたはidフィールドを宣言として:PenetratingIdGeneratorは、カスタムIDジェネレータはにIdentifierGeneratorインタフェースを実装している

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY, 
    generator = "LegacyIdGenerator") 
@GenericGenerator(
    name = "LegacyIdGenerator", 
    strategy = "com.backend.hibernate.PenetratingIdGenerator") 

。これで、基盤となるデータベースの依存性に応じてIDを生成できます。 設定ファイルに異なる方言などを定義する必要があるため、アプリケーションではdbが基礎であることがわかります。

0

注釈@GeneratedValue(strategy = GenerationType.AUTO)の場合、JPA永続性プロバイダは、特定のデータベースに対して適切な戦略を実行します。 Oracleデータベースの場合、これはSEQUENCEになります。何も指定しない場合、Hibernateは単一のグローバルシーケンス、つまりhibernate_sequenceを使用します。

@Id 
@GeneratedValue(strategy=GenerationType.AUTO, generator="seq_gen_default") 
@SequenceGenerator(name="seq_gen_default", sequenceName="ENTITY_SEQ") 
private Long id;