Du kan bruge annotationen @JoinTable efter @OneToOne til at pege på kortets bord, så du behøver ikke en enhed for kort, men hvis kortets tabel ikke kun er en relationstabel, kan du kortlægge kortet i User som @OneToOne og har en @Transient 'getAddress()'-metode, der returnerer 'this.card.getAddress()', men på kortets entitet skal du kortlægge relationen mellem Address og Card(@OneToOne(mappedBy='card_id')), og i Adresse, du kunne kortlægge card_id som @Id.
Første alternativ
Kunde:
@OneToOne
@JoinTable(name="card", joinColumns = @JoinColumn(name="cust_id"),
inverseJoinColumns = @JoinColumn(name="card_id"))
private Address address;
Andet alternativ
Kunde:
@OneToOne(mappedBy="cust_id")
private Card card;
...
@Transient
public Address getAddress(){
return this.card == null ? null : this.card.getAddress();
}
Kort:
@OneToOne(mappedBy="card_id")
private Address address;
Adresse:
@Id
private String card_id;
I det andet tilfælde har kortet en indlejret pk, som er dannet af to fks (kunde og adresse)
Kort:
@EmbeddedId
private CustomerAddressPK id;
KundeadressePK
@Embeddable
public class CustomerAddressPK(){
private String cust_id;
private String card_id;
}