Anda dapat menggunakan anotasi @JoinTable setelah @OneToOne untuk mengarahkan tabel kartu, jadi Anda tidak memerlukan entitas untuk kartu, tetapi jika tabel kartu bukan hanya tabel relasional, Anda dapat memetakan kartu di Pengguna sebagai @OneToOne dan memiliki metode 'getAddress()' @Transient yang mengembalikan 'this.card.getAddress()', tetapi pada entitas kartu Anda harus memetakan hubungan antara Alamat dan Kartu(@OneToOne(mappedBy='card_id')), dan di Alamat yang dapat Anda petakan card_id sebagai @Id.
Alternatif Pertama
Pelanggan:
@OneToOne
@JoinTable(name="card", joinColumns = @JoinColumn(name="cust_id"),
inverseJoinColumns = @JoinColumn(name="card_id"))
private Address address;
Alternatif kedua
Pelanggan:
@OneToOne(mappedBy="cust_id")
private Card card;
...
@Transient
public Address getAddress(){
return this.card == null ? null : this.card.getAddress();
}
Kartu:
@OneToOne(mappedBy="card_id")
private Address address;
Alamat:
@Id
private String card_id;
Dalam kasus Kedua Kartu memiliki pk Tertanam yang dibentuk oleh dua fks(Pelanggan dan Alamat)
Kartu:
@EmbeddedId
private CustomerAddressPK id;
CustomerAddressPK
@Embeddable
public class CustomerAddressPK(){
private String cust_id;
private String card_id;
}