Oracle
 sql >> Base de données >  >> RDS >> Oracle

Hibernate Mapping - Joindre deux tables avec une table d'association - Mais avec une torsion

Vous pouvez utiliser l'annotation @JoinTable après le @OneToOne pour pointer vers la table de la carte, vous n'aurez donc pas besoin d'une entité pour la carte, mais si la table de la carte n'est pas simplement une table relationnelle, vous pouvez mapper la carte dans Utilisateur en tant que @OneToOne et avoir une méthode @Transient 'getAddress()' qui renvoie 'this.card.getAddress()', mais sur l'entité de la carte, vous devez mapper la relation entre l'adresse et la carte(@OneToOne(mappedBy='card_id')), et dans Adresse que vous pouvez mapper card_id comme @Id.

Première alternative

Client :

@OneToOne
@JoinTable(name="card", joinColumns = @JoinColumn(name="cust_id"),
inverseJoinColumns = @JoinColumn(name="card_id"))
private Address address;

Deuxième alternative

Client :

@OneToOne(mappedBy="cust_id")
private Card card;

...
@Transient
public Address getAddress(){
 return this.card == null ? null : this.card.getAddress();
}

Carte :

@OneToOne(mappedBy="card_id")
private Address address;

Adresse :

@Id
private String card_id;

Dans le deuxième cas, la carte a un pk intégré qui est formé de deux fks (client et adresse)

Carte :

@EmbeddedId
private CustomerAddressPK id;

CustomerAddressPK

@Embeddable
public class CustomerAddressPK(){

  private String cust_id;
  private String card_id;
}