2016-11-16 8 views
2

エンティティの世代IDの場合、アプリケーションはトリガを使用します。だから、エンティティに生成された値を割り当てるために、私たちはこのような構造を使用します。コンポジット@HibernateエンティティのNaturalId

@Id 
@Column(name = "INVOICE_ID") 
@GeneratedValue(generator = "trigger") 
@GenericGenerator(name = "trigger", strategy = "org.hibernate.id.SelectGenerator") 
private Long invoiceId; 

@Column(name = "INVOICE_AMOUNT") 
@NaturalId(mutable = true) 
private Double invoiceAmount; 

SelectorGeneratorはすべきでは(論理的に)一意の値を持ついくつかのフィールド、ため@NaturalIdを使用する必要があります。しかし、一部のテーブルには、一意の値を持つフィールドはありません。 SelectGeneratorは複数の自然IDをサポートしていません。この状況をどうやって取り戻すことができますか?

答えて

0

このような場合に利用できるソリューションとして、エンティティのIDを取得する少しのメカニズムを変更しました。代わりに

@GenericGenerator(name = "trigger", strategy ="org.hibernate.id.SelectGenerator")

を使用しての我々はそれが@NaturalIdをrequreないデータベース・シーケンス・ジェネレータ

@Id 
@Column(name = "INVOICE_ID") 
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "invoice_id_seq") 
@SequenceGenerator(name = "invoice_id_seq", sequenceName = "INVOICE_ID_SEQ") 
private Long invoiceId; 

を使用することが好ま、それが私たちの問題を解決しました。

関連する問題