Abfragen ManyToMany Beziehung mit Hibernate Kriterien
Ich bin mir nicht sicher, wie Sie Sie beschreiben dieses problem, so denke ich, ein Beispiel ist der beste Weg, um zu Fragen, meine Frage:
Ich habe zwei Tabellen mit einer manyToMany Beziehung:
DriversLicence <-> LicenceClass
LicenceClass Dinge wie "Auto", "Motorrad", und "Mittlere Hart".
Einsatz von Hibernate Kriterien, wie finde ich alle Lizenzen, die sowohl "Auto" und "Motorrad" LicenceClasses?
UPDATE am 12.11.2008
Ich habe entdeckt, dass dies kann leicht erreicht werden, indem eine benutzerdefinierte ResultTransformer. Aber das problem ist, dass ein Ergebnis Transformator wird nur angewendet, NACHDEM die Abfrage gibt die Ergebnisse, ist es nicht tatsächlich Teil der SQL. Also ich denke, meine Frage ist jetzt "Kann Sie tun, was ich anfänglich beschrieben, die in SQL - und ist es ein Hibernate-Kriterien analog?"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist, wie ich es letztendlich geschafft, dass es mit HQL:
Oder mit Hibernate Kriterien mit ein sqlRestriction:
LICENCE_CLASS_JOIN_TABLE ist der name der Tabelle, hibernate generiert zu unterstützen, die viele-zu-viele-Beziehung zwischen driversLicence und LicenceClass.
Können Sie immer noch verwenden die Punktnotation, um die Arbeit über die Beziehungen. Zum Beispiel, vorausgesetzt, Sie haben eine DriversLicence.licenceClass Eigentum und LicenceClass.type-Eigenschaft, dann:
Persönlich, aber ich möchte einfach vermeiden, indem Sie Kriterien in diesem Fall, weil es nicht die eine dynamische Abfrage, sondern stattdessen:
Ich hatte ein ähnliches Problem aber behoben, die mit HQL, habe ich eine Klasse "Enterprise", die im Zusammenhang mit der Klasse "Benutzer" und auch im Zusammenhang mit der Klasse "Rolle", die Sie Heu eine viele zu viele Beziehung, wenn ich Bedarf der Unternehmen in Bezug auf einen bestimmten Benutzer ich den folgenden;
Ich nehme an, dass in Ihrem Fall sollten Sie so etwas tun;
Hoffe, es hilft.
Eine weitere option ist die Kette-joins (ein join-pro LicenseClass). Ich verwendete Kriterien-generator und Prädikate wie diese
Bemerken dlRoot ist Objekt der Root-Klasse und Sie können es von CriteriaQuery-Klasse. Führte Prädikat ist das, was sind Sie auf der Suche nach...
"Ich glaube nicht, dass dies funktionieren würde. Ich möchte finden Sie alle Lizenzen, die beide "Auto" und "Motorrad" '
Benutzer Ausdruck.und(....) statt des Ausdrucks.oder(....) im snippet zur Verfügung gestellt von Nick