Hibernateの外部IDジェネレーターに相当するJPAは何ですか?
<id column="PERSON_ID" name="id" type="java.lang.Long">
<generator class="foreign">
<param name="property">person</param>
</generator>
</id>
AFAIK、JPA仕様では、外部IDジェネレーターは標準化されていません。このインスタンスを保存する前に、プログラムでPK値を正しく設定する必要があります。
Hibernateに関しては、外部IDジェネレーターを有効にするための拡張アノテーションがあります。よろしければ、それを使用することを選択できます。
@Id
@GeneratedValue(generator = "myForeignGenerator")
@org.hibernate.annotations.GenericGenerator(
name = "myForeignGenerator",
strategy = "foreign",
parameters = @Parameter(name = "property", value = "person")
)
@Column(name = "PERSON_ID")
private Long id;
JPA 2.0の価値については、外部キーのインポートに使用できる@MappedByアノテーションを追加します。クリスチャンの例から始めて、ケンチャンの例から簡単に退屈:
@Id
@Column
private Long personId;
@ManyToOne
@JoinColumn(name = "personId")
@MapsId
private Person person;
この質問はかなり前からのものだと知っていますが、同じ問題を解決するときに偶然見つけて掘り下げた@MappedBy
ので、後でこれに遭遇した人のために追加したいと思いました。