2015-05-17 30 views

Odpowiedz

12

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.

+0

, więc JoinTable jest relacją N-N? – julestruong

+0

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. –

3

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