@OneToOneの後に注釈@JoinTableを使用してカードのテーブルを指すことができるため、カードのエンティティは必要ありませんが、カードのテーブルが単なるリレーショナルテーブルではない場合は、ユーザーのカードを@OneToOneとしてマップできます。 'this.card.getAddress()'を返す@Transient'getAddress()'メソッドがありますが、カードのエンティティでは、AddressとCard(@OneToOne(mappedBy ='card_id'))の間の関係をマップする必要があります。 card_idを@Idとしてマップできるアドレス。
最初の選択肢
顧客:
@OneToOne
@JoinTable(name="card", joinColumns = @JoinColumn(name="cust_id"),
inverseJoinColumns = @JoinColumn(name="card_id"))
private Address address;
2番目の選択肢
顧客:
@OneToOne(mappedBy="cust_id")
private Card card;
...
@Transient
public Address getAddress(){
return this.card == null ? null : this.card.getAddress();
}
カード:
@OneToOne(mappedBy="card_id")
private Address address;
住所:
@Id
private String card_id;
2番目のケースでは、カードには2つのfks(顧客と住所)によって形成される埋め込みpkがあります
カード:
@EmbeddedId
private CustomerAddressPK id;
CustomerAddressPK
@Embeddable
public class CustomerAddressPK(){
private String cust_id;
private String card_id;
}