sono possibili con i criteri di Hibernate?I criteri di sospensione e il join multiplo
select A.something, B.something, C.something, D.something
from A JOIN B on A.id = B.id_fk
JOIN C ON B.id = C.id_fk
JOIN D ON C.id = D.id_fk;
sono possibili con i criteri di Hibernate?I criteri di sospensione e il join multiplo
select A.something, B.something, C.something, D.something
from A JOIN B on A.id = B.id_fk
JOIN C ON B.id = C.id_fk
JOIN D ON C.id = D.id_fk;
ho avuto esattamente lo stesso problema, ed è stato in grado di risolvere in questo modo:
return criteria.createCriteria(A.class)
.createCriteria("b", "join_between_a_b")
.createCriteria("c", "join_between_b_c")
.createCriteria("d", "join_between_c_d")
.add(Restrictions.eq("some_field_of_D", someValue));
Nota: "b"
, "c"
e "d"
nel codice di cui sopra si riferiscono a nomi degli attributi in A
, B
e C
classi, corrispondente (classe A
ha attributo b
e così via).
Per questa soluzione non è nemmeno necessario avere i parametri lazy
e fetch
da impostare nel numero A.hbm.xml
.
Per quanto riguarda il seguente SQL: selezionare A.columnA1, B.columnB1, C.columnC1 da Un inner join B su A.fk_id = B.id inner join C su C.fk_id = B.id? – maximilianus
Per favore apri una domanda a parte per questo. – mindas
Provare a impostare la modalità di recupero nei criteri, come:
criteria.setFetchMode(..., FetchMode.EAGER)
Questo crea una query join. È possibile trovare ulteriori dettagli here.
Ci sono alcuni buoni esempi nello Hibernate Reference material che mostrano di usare setFetchMode per recuperare associazioni con un join esterno.
Un esempio è:
List books = sess.createCriteria(Book.class)
.setFetchMode("chapters", FetchMode.EAGER)
.setFetchMode("reviews", FetchMode.EAGER)
.list();
C'è anche information there about different fetching stragies che può essere utile a voi.
In realtà questo non ha funzionato per me, ho dovuto farlo come nella risposta che ho postato. Potrebbe essere perché avevo un criterio in più sul 'D'. – mindas
Sì, infatti ci sono diversi modi per farlo:
http://stackoverflow.com/questions/8726396/hibernate-criteria-join-with-3-tables link qui sopra menzionato può aiutare. –