@JoinColumn
dà un Entity
una chiave esterna a un'altra Entity
mentre @JoinTable
elencherà il rapporto tra tutti i rapporti tra Entity
A e B. Entity
Per quanto posso dire, entrambi sembrano fare cose simili. Quando dovrei usare l'uno o l'altro?Quando dovrei usare @JoinColumn o @JoinTable?
risposta
Diciamo che avete un soggetto A
, che ha un'associazione @ManyToOne
ot un'entità B
@JoinColumn definirà la tabella di destinazione chiave esterna (per esempio B_ID
) mentre si utilizza la tabella di destinazione Entità (ad esempio B
).
@Entity
public class A {
private Long id;
@ManyToOne
@JoinColumn(name="B_ID")
private B b;
}
@JoinTable userà una tabella separata per contenere il rapporto tra A
e 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;
}
Questa volta né A
né B
contiene alcuna chiave esterna, perché c'è una tabella separata (ad esempio A_B
) per tenere l'associazione tra A
e B
.
@JoinTable memorizza l'id di entrambe le tabelle in una tabella separata mentre @JoinColumn memorizza l'id di un'altra tabella in una nuova colonna.
@JoinTable: questo è il tipo predefinito. Usalo quando hai bisogno di un database più normalizzato. vale a dire. ridurre la ridondanza.
@JoinColumn: utilizzare questo per prestazioni migliori in quanto non è necessario unirsi alla tabella aggiuntiva.
quindi un JoinTable è una relazione N-N? – julestruong
Nella terminologia del database, è un'associazione many-to-many. In questo caso, un FK avrà un vincolo univoco per trasformarlo in un'associazione uno-a-molti con una tabella di join. –