Je zou de annotatie @JoinTable na de @OneToOne kunnen gebruiken om naar de tafel van de kaart te wijzen, dus je hebt geen entiteit nodig voor de kaart, maar als de tafel van de kaart niet alleen een relationele tafel is, kun je de kaart in Gebruiker toewijzen als @OneToOne en een @Transient 'getAddress()'-methode hebben die 'this.card.getAddress()' retourneert, maar op de entiteit van de kaart moet u de relatie tussen Address en Card(@OneToOne(mappedBy='card_id')), en in Adres dat u card_id zou kunnen toewijzen als @Id.
Eerste alternatief
Klant:
@OneToOne
@JoinTable(name="card", joinColumns = @JoinColumn(name="cust_id"),
inverseJoinColumns = @JoinColumn(name="card_id"))
private Address address;
Tweede alternatief
Klant:
@OneToOne(mappedBy="cust_id")
private Card card;
...
@Transient
public Address getAddress(){
return this.card == null ? null : this.card.getAddress();
}
Kaart:
@OneToOne(mappedBy="card_id")
private Address address;
Adres:
@Id
private String card_id;
In het tweede geval heeft Card een Embedded pk die wordt gevormd door twee fks (klant en adres)
Kaart:
@EmbeddedId
private CustomerAddressPK id;
CustomerAddressPK
@Embeddable
public class CustomerAddressPK(){
private String cust_id;
private String card_id;
}