Mohli byste použít anotaci @JoinTable za @OneToOne k nasměrování na tabulku karet, takže nebudete potřebovat entitu pro kartu, ale pokud tabulka karet není jen relační tabulka, můžete kartu namapovat v Uživateli jako @OneToOne a mít metodu @Transient 'getAddress()', která vrací 'this.card.getAddress()', ale na entitě karty musíte namapovat vztah mezi adresou a kartou (@OneToOne(mappedBy='card_id')) a v Adresa, kterou můžete mapovat card_id jako @Id.
První alternativa
Zákazník:
@OneToOne
@JoinTable(name="card", joinColumns = @JoinColumn(name="cust_id"),
inverseJoinColumns = @JoinColumn(name="card_id"))
private Address address;
Druhá alternativa
Zákazník:
@OneToOne(mappedBy="cust_id")
private Card card;
...
@Transient
public Address getAddress(){
return this.card == null ? null : this.card.getAddress();
}
Karta:
@OneToOne(mappedBy="card_id")
private Address address;
Adresa:
@Id
private String card_id;
Ve druhém případě má karta vestavěný pk, který je tvořen dvěma fks (zákazník a adresa)
Karta:
@EmbeddedId
private CustomerAddressPK id;
CustomerAddressPK
@Embeddable
public class CustomerAddressPK(){
private String cust_id;
private String card_id;
}