Ich möchte eine Abfrage bilden, wo eine zugeordnete Sammlung wurde eingeschränkt, idealerweise mit Hibernate Kriterien oder HQL, aber ich wäre interessiert, wie dies in SQL zu tun. Angenommen, ich habe eine Boy Klasse mit einer bidirektionalen Eins-zu-viele-Verknüpfung zur Kites-Klasse. Ich möchte eine Liste der Jungen bekommen, deren Drachenlängen in einer Reichweite sind.Abfrage für die Einschränkung verknüpfter Entitäten
Das Problem ist, dass die HQL/Kriterien Ich weiß, macht mich nur Boy Objekte mit einem kompletten (frei) Satz von Kites, wie in diesen beiden Beispiele gegeben (die HQL ist eine Vermutung). Das heißt, ich bekomme die Jungs, die Drachen im richtigen Bereich haben, aber für jeden solchen Jungen bekomme ich alle der Drachen, nicht nur die in der Reihe.
select new Boy(name) from Boy b
inner join Kite on Boy.id=Kite.boyId
where b.name = "Huck" and length >= 1;
Criteria crit = session.createCriteria(Boy.class);
crit.add(Restrictions.eq("name", "Huck"))
.createCriteria("kites")
.add(Restrictions.ge("length", new BigDecimal(1.0)));
List list = crit.list();
Im Augenblick ist die einzige Art, wie ich die richtigen Kite Länge Sets bekommen haben, ist durch die Liste der Jungen und für jede eine erneute Abfrage Kites für die, die im Bereich iterieren. Ich hoffe, dass ein SQL/HQL/Kriterien-Assistent einen besseren Weg kennt. Ich würde bevorzugen, eine Kriterienlösung zu erhalten, weil mein wirklicher "Jungen" Erbauer ziemlich viele Argumente hat und es handlich sein würde, die initialisierten Jungen zu haben.
Meine zugrunde liegende Datenbank ist MySQL. Gehen Sie nicht davon aus, dass ich viel über SQL oder Hibernate weiß. Vielen Dank!
Danke, das ist ausgezeichnet und hat mich in die richtige Richtung denken lassen. – Glenn