@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.
- 1. django - quando dovrei usare media_root o static_root?
- 2. C# Quando dovrei usare List e quando dovrei usare l'arraylist?
- 3. Quando dovrei usare CompiledQuery?
- 4. Quando dovrei usare AQL?
- 5. Quando dovrei usare ConcurrentSkipListMap?
- 6. Quando dovrei usare l'Interface Builder?
- 7. Quale dovrei usare? decimal.Add() o "+"
- 8. Quando dovrei usare un parser?
- 9. Quando dovrei usare metodi statici?
- 10. Quando dovrei usare git stash?
- 11. Quando dovrei usare setUpClass e quando __init__?
- 12. dovrei usare urandom o openssl_random_pseudo_bytes?
- 13. Quando dovrei usare # in ColdFusion?
- 14. Quando dovrei usare l'inizializzazione uniforme?
- 15. Quando dovrei usare call() o invocare direttamente la funzione?
- 16. Quando posso usare Cell o RefCell, quale dovrei scegliere?
- 17. in PHP, quando dovrei usare metodi statici o classi astratte?
- 18. Quando dovrei usare FrameworkPropertyMetadata o UIPropertyMetadata su PropertyMetadata normale?
- 19. Quando dovrei usare HttpDelete o HttpPut in un'applicazione asp.net mvc
- 20. Quando dovrei usare Option.empty [A] e quando dovrei usare None in Scala?
- 21. Quando dovrei usare require() e quando usare define()?
- 22. Java: dovrei usare float o float?
- 23. Quando dovrei usare package-private in Java?
- 24. Livello isolamento - Serializzabile. Quando dovrei usare questo?
- 25. Quando dovrei usare Sql Azure e quando dovrei usare la tabella Storage?
- 26. Quando dovrei usare Import-Package e quando dovrei usare Require-Bundle?
- 27. Quando dovrei usare PowerShell su applicazioni tradizionali?
- 28. Quando dovrei usare parentesi in knockout
- 29. Quando non dovrei usare le espressioni regolari?
- 30. Quando/Perché dovrei usare Multithread in Java?
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. –