@JoinColumn
daje Entity
klucz obcy do drugiego Entity
natomiast @JoinTable
pokaże relację między wszystkich relacjach między Entity
A i Entity
B. O ile mogę powiedzieć, oboje wydają się robić podobne rzeczy. Kiedy powinienem użyć jednego lub drugiego?Kiedy należy używać @JoinColumn lub @JoinTable?
Odpowiedz
Powiedzmy masz podmiot A
który ma stowarzyszenie @ManyToOne
ot podmiot B
@JoinColumn zdefiniuje tabeli docelowej klucz obcy (np B_ID
) podczas korzystania z tabeli jednostką docelową (np B
).
@Entity
public class A {
private Long id;
@ManyToOne
@JoinColumn(name="B_ID")
private B b;
}
@JoinTable użyje osobną tabelę do przechowywania relacji między A
i B
.
@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;
}
Tym razem ani A
ani B
zawierać dowolny klucz obcy, bo nie ma osobny stół (np A_B
), aby utrzymać związek między A
i B
.
@JoinTable przechowuje identyfikator obu tabel w oddzielnej tabeli, a @JoinColumn przechowuje id innej tabeli w nowej kolumnie.
@JoinTable: Jest to typ domyślny. Użyj tego, gdy potrzebujesz bardziej znormalizowanej bazy danych. to znaczy. w celu zmniejszenia nadmiarowości.
@JoinColumn: Użyj tej opcji, aby uzyskać lepszą wydajność, ponieważ nie trzeba dołączać dodatkowej tabeli.
, więc JoinTable jest relacją N-N? – julestruong
W terminologii bazy danych jest to stowarzyszenie wielu do wielu. W takim przypadku jeden FK będzie miał unikalne ograniczenie, aby przekształcić je w jedno-do-wielu skojarzenie z tabelą sprzężenia. –