Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Hibernate Mapping — łączenie dwóch tabel za pomocą tabeli asocjacyjnej — ale z niespodzianką

Możesz użyć adnotacji @JoinTable po @OneToOne, aby wskazać tabelę karty, więc nie będziesz potrzebować encji dla karty, ale jeśli tabela karty nie jest tylko tabelą relacyjną, możesz zmapować kartę w User jako @OneToOne i mieć metodę @Transient 'getAddress()', która zwraca 'this.card.getAddress()', ale na encji karty musisz zmapować relację między Address i Card(@OneToOne(mappedBy='card_id')) oraz w Adres, który możesz zmapować card_id jako @Id.

Pierwsza alternatywa

Klient:

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

Druga alternatywa

Klient:

@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;

Adres:

@Id
private String card_id;

W drugim przypadku karta ma osadzony pk, który składa się z dwóch fks (klienta i adresu)

Karta:

@EmbeddedId
private CustomerAddressPK id;

Pakiet adresu klienta

@Embeddable
public class CustomerAddressPK(){

  private String cust_id;
  private String card_id;
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hibernacja Oracle ORA-01461 CLOB

  2. Jak korzystać z plików Oracle DMP?

  3. projektowanie baz danych jeden-do-wielu-do-wielu

  4. Jak połączyć się z bazą danych Oracle w R?

  5. używanie EXECUTE IMMEDIATE z wieloma tymi samymi argumentami bind