Oracle
 sql >> Database >  >> RDS >> Oracle

Hibernate Mapping - Unire due tabelle con una tabella di associazione - Ma con una svolta

Puoi usare l'annotazione @JoinTable dopo @OneToOne per puntare il tavolo delle carte, quindi non avrai bisogno di un'entità per la carta, ma se il tavolo delle carte non è solo un tavolo relazionale, puoi mappare la carta in Utente come @OneToOne e avere un metodo @Transient 'getAddress()' che restituisce 'this.card.getAddress()', ma sull'entità della carta devi mappare la relazione tra Address e Card(@OneToOne(mappedBy='card_id')), e in Indirizzo che potresti mappare card_id come @Id.

Prima alternativa

Cliente:

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

Seconda alternativa

Cliente:

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

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

Carta:

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

Indirizzo:

@Id
private String card_id;

Nel secondo caso Card ha un pacchetto Embedded che è formato da due fks (Cliente e Indirizzo)

Carta:

@EmbeddedId
private CustomerAddressPK id;

CustomerAddressPK

@Embeddable
public class CustomerAddressPK(){

  private String cust_id;
  private String card_id;
}