ist mit Hibernate-Kriterien möglich, oder?Hibernate-Kriterien und multiple Join
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;
ist mit Hibernate-Kriterien möglich, oder?Hibernate-Kriterien und multiple Join
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;
Ich habe genau das gleiche Problem bekam, und konnte es so lösen:
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));
Hinweis: "b"
, "c"
und "d"
in obigem Code verweisen Namen in A
, B
und C
zuzuschreiben Klassen entsprechend (Klasse A
hat Attribut b
und so weiter).
Für diese Lösung müssen nicht einmal lazy
und fetch
Parameter in Ihrem A.hbm.xml
eingestellt werden.
Wie wäre es für die folgende SQL: Wählen Sie A.columnA1, B.columnB1, C.columnC1 aus A innere Join B auf A.fk_id = B.id innere Join C auf C.fk_id = B.id? – maximilianus
Bitte öffnen Sie dazu eine separate Frage. – mindas
Versuchen Sie, den Fetch-Modus in Ihren Kriterien einstellen, wie:
criteria.setFetchMode(..., FetchMode.EAGER)
Dies schafft eine Join-Abfrage. Sie können weitere Details here finden.
Es gibt einige gute Beispiele in Hibernate Reference material, die zeigen, dass setFetchMode verwendet wird, um Verknüpfungen mit einem äußeren Join abzurufen.
Ein Beispiel ist:
List books = sess.createCriteria(Book.class)
.setFetchMode("chapters", FetchMode.EAGER)
.setFetchMode("reviews", FetchMode.EAGER)
.list();
Es ist auch information there about different fetching stragies, die Ihnen nützlich sein können.
Eigentlich funktionierte das nicht für mich, ich musste es tun wie in der Antwort, die ich gepostet habe. Es könnte sein, dass ich ein zusätzliches Kriterium für das "D" hatte. – mindas
Ja, in der Tat gibt es mehrere Möglichkeiten, dies zu tun:
http://stackoverflow.com/questions/8726396/hibernate-criteria-join-with-3-tables Die oben genannten Link kann Ihnen helfen. –