2015-05-17 7 views
7

@JoinColumn gibt eine Entity ein Fremdschlüssel zu einem anderen Entity während @JoinTable wird die Beziehung zwischen allen Beziehungen zwischen Entity A und Entity B. Soweit ich sagen kann, Liste, sie beide ähnliche Dinge zu tun scheinen. Wann sollte ich das eine oder andere benutzen?Wann sollte ich @JoinColumn oder @JoinTable verwenden?

Antwort

12

Angenommen, Sie haben ein Unternehmen A haben, die eine @ManyToOne Vereinigung ein Unternehmen ot hat B

@JoinColumn wird die Zieltabelle Foreign Key (z B_ID) definieren, während die Zieleinheit Tabelle (z B).

@Entity 
public class A { 

    private Long id; 

    @ManyToOne 
    @JoinColumn(name="B_ID") 
    private B b; 

} 

@JoinTable wird eine separate Tabelle verwenden, um die Beziehung zwischen AB und zu halten.

@Entity 
public class A { 

    private Long id; 

    @ManyToOne 
    @JoinTable(
     name = "A_B", 
     joinColumns = @JoinColumn(name = "B_ID"), 
     inverseJoinColumns = @JoinColumn(name = "A_ID") 
    ) 
    private B b; 

} 

Diesmal weder A noch B jeden Fremdschlüssel enthalten, weil es eine separate Tabelle ist (zum Beispiel A_B) den Zusammenhang zwischen A und B zu halten.

+0

so eine JoinTable ist eine N-N-Beziehung? – julestruong

+0

In der Terminologie der Datenbank ist es eine Viele-zu-Viele-Assoziation. In diesem Fall hat ein FK eine eindeutige Einschränkung, um es in eine Eins-zu-Viele-Verknüpfung mit einer Join-Tabelle umzuwandeln. –

3

@JoinTable speichert die ID der Tabelle in einer separaten Tabelle, während @JoinColumn die ID der anderen Tabelle in einer neuen Spalte speichert.

@JoinTable: Dies ist der Standardtyp. Verwenden Sie dies, wenn Sie eine normalisierte Datenbank benötigen. dh. Redundanz reduzieren.

@JoinColumn: Verwenden Sie dies für eine bessere Leistung, da keine zusätzliche Tabelle hinzugefügt werden muss.