含まれている Ebean ORM 永続化レイヤーの一部として JPA アノテーションと Hibernate を使用する Play フレームワークを使用してアプリケーションを作成しています。外部キーに関連する JPA アノテーションを理解するのに苦労しています。私の MySQL データベースには、住所 (番地、都市、州、郵便番号など) を格納する Locations というメイン テーブルが 1 つあります。データベース内の他の多くのテーブルは、このテーブルを 1 対 1 または多対多の関係で使用します。問題は、複数のフィールドを Locations の id フィールドにマップしようとするとエラーが発生することです。
たとえば、Docks と LineItems は、Location への参照を含む 2 つのモデルです。各 Dock には Location があり、各 LineItem には 2 つの Location (出発地と目的地) があります。
したがって、Dock には次のコードがあります。
@OneToOne(optional=false)
@JoinColumn(name="loc_id")
public Location location;
LineItem には、次のものがあります。
@OneToOne(optional=false)
@JoinColumn(name="origin")
public Location origin;
@OneToOne(optional=false)
@JoinColumn(name="destination")
public Location destination;
しかし、JPA ではこれが許可されないため、それらすべてを Locations の id フィールドにマップすることはできません。
@Id
@GeneratedValue
@OneToOne(mappedBy="location", fetch=FetchType.EAGER)
@OneToOne(mappedBy="origin", fetch=FetchType.EAGER)
@OneToOne(mappedBy="destination", fetch=FetchType.EAGER)
@Column(name="loc_id")
public Long id;
私はこれについて間違った方法で進んでいると感じています。JPAで外部キー制約を設定する簡単な方法はありますか? Locations は実際には LOT を参照しているため、テーブルに余分な列を作成するような回避策は実際には使用したくありません。私をまっすぐにするためのアドバイスをいただければ幸いです。