Il mio problema è molto semplice ma non so come rendere Hibernate come preferisco: - tabella MainTable ha Many-2-One con ParentTable (con 100 file). punto MainTable per m = 26 righe su 100 righe in ParentTableHibernate genera m + 1 query in Numero uno
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "PARENT_ID")
@Fetch(FetchMode.JOIN)
Quando ho semplicemente query "da MainTable"
genererà 26 + 1 interroga
Quando traccio le query, la La prima query carica solo PARENT_ID utilizzato da 26 query successive. Credo che dovrebbe avere il modo di caricare l'intero PARENT_TABLE nel 1 ° interrogazione ..
Aiutateci assumendo che:
- FetchType.EAGER è un MUST
- Utilizzando da MainTable mt LEFT JOIN prendere genitore mt.parent è ok, ma abbiamo molti associazione
Evitare N + 1 seleziona il problema: http://www.realsolve.co.uk/site/tech/hib-tip-pitfall.php?name=n1selects http://stackoverflow.com/questions/97197/what -is-the-n1-selects-problem –
@Pangea: Grazie, ma qui alcuni commenti: 1) L'utilizzo di fetch join è buono, ma abbiamo circa dieci tabelle Parent. Questa sarà l'ultima soluzione 2) Vogliamo qualcosa di simile a Subselect fetch in One-2-Many, quindi 1 query per MainTable, 1 altro per la tabella correlata –
@Fetch (FetchMode.JOIN) e @Fetch (FetchMode.SELECT) non dare assolutamente nulla !!! o_0 –