JPAのエンティティマッピングに次の問題があります。 2つのエンティティがあります。1つ目はルックアップで、2つ目はエンティティの翻訳を表すテキストです。ここで、LookupをTextにバインドする必要がありますが、TextにLookupへの参照を持たせたくありません。これをより複雑にするために、Textはこの関係で主キーを使用せず、TXTHEAD_CODE
列で定義されたメタコードを使用します。
Lookup.Java
@Entity
@Table(name = "DATREG")
public class Lookup implements PersistableEntity {
@Id
@Column(name = "DATREG_META_CODE")
private String metaCode;
@OneToMany
@JoinTable(name="TXT",
joinColumns=@JoinColumn(name="DATREG_META_CODE", referencedColumnName="TXTHEAD_CODE"),
inverseJoinColumns=@JoinColumn(name="DATREG_META_CODE"))
private List<Text> text;
Text.Java
@Entity
@Table(name = "TXT")
public class Text {
@Id
@Column(name = "TXT_ID")
private Long id;
@Column(name = "TXTHEAD_CODE")
private String code;
だから私はこれを試してみました(そして他のいくつかのバリエーション)が結果はありませんでした。 DBに結合テーブルを作成することもできません。また、LookupをTextクラスにバインドしたくありません。他の方法がある場合、誰でも教えてください。
JPAの仕事のための私の聖書は Java Persistence wikibook です。 単方向OneToMany
のセクション があり、@JoinColumn
アノテーションでこれを行う方法を説明しています。あなたの場合、私はあなたが望むだろうと思う:
@OneToMany
@JoinColumn(name="TXTHEAD_CODE")
private Set<Text> text;
データ自体が順序付けされていないため、Set
ではなくList
を使用しました。
上記では、Wikibookの例とは異なり、デフォルトのreferencedColumnName
を使用しています。それでもうまくいかない場合は、明示的に試してください:
@OneToMany
@JoinColumn(name="TXTHEAD_CODE", referencedColumnName="DATREG_META_CODE")
private Set<Text> text;