@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
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 A
B
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.
@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.
so eine JoinTable ist eine N-N-Beziehung? – julestruong
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. –