Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Hibernate Mapping - Verbinden zweier Tabellen mit einer Assoziationstabelle - Aber mit einem Twist

Sie könnten die Annotation @JoinTable nach @OneToOne verwenden, um auf die Tabelle der Karte zu verweisen, sodass Sie keine Entität für die Karte benötigen, aber wenn die Tabelle der Karte nicht nur eine relationale Tabelle ist, können Sie die Karte im Benutzer als @OneToOne zuordnen und haben eine @Transient 'getAddress()'-Methode, die 'this.card.getAddress()' zurückgibt, aber auf der Entität der Karte müssen Sie die Beziehung zwischen Adresse und Karte(@OneToOne(mappedBy='card_id')) und in abbilden Adresse, die Sie card_id als @Id zuordnen könnten.

Erste Alternative

Kunde:

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

Zweite Alternative

Kunde:

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

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

Karte:

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

Adresse:

@Id
private String card_id;

Im zweiten Fall hat die Karte ein eingebettetes pk, das aus zwei fks (Kunde und Adresse) besteht

Karte:

@EmbeddedId
private CustomerAddressPK id;

KundenadressePK

@Embeddable
public class CustomerAddressPK(){

  private String cust_id;
  private String card_id;
}