Ich bin mir nicht sicher, wie ich dieses Problem beschreiben soll. Ich denke, ein Beispiel ist der beste Weg, meine Frage zu stellen:
Ich habe zwei Tabellen mit einer manyToMany-Beziehung:
DriversLicence & lt; - & gt; Lizenzklasse
LicenceClass ist Dinge wie "Auto", "Motorrad" und "Medium Rigid".
Wie finde ich mit Hibernate Criteria alle Lizenzen, die sowohl "Car" - als auch "Motorbike" -LicenceClasses enthalten?
UPDATE 12/11/2008 Ich habe festgestellt, dass dies leicht mit einem benutzerdefinierten ResultTransformer erreicht werden kann. Das Problem besteht jedoch darin, dass ein Ergebnistransformator erst angewendet wird, nachdem die Abfrage ihre Ergebnisse zurückgegeben hat. Sie wird nicht tatsächlich Teil des SQL. Also meine Frage ist jetzt "Können Sie tun, was ich ursprünglich in SQL beschrieben habe - und gibt es ein Hibernate Criteria-Analog?"
So habe ich es endlich mit HQL erreicht:
%Vor%Oder verwenden Sie Hibernate-Kriterien mit einer sqlRestriction:
%Vor%LICENCE_CLASS_JOIN_TABLE ist der Name der Tabelle, die Hibernate generiert, um die Viele-zu-Viele-Beziehung zwischen driversLicence und LicenceClass zu unterstützen.
Sie können die Punktnotation weiterhin verwenden, um die Beziehungen zu bearbeiten. Angenommen, Sie haben beispielsweise eine DriversLicence.licenceClass-Eigenschaft und eine LicenceClass.type-Eigenschaft, dann:
%Vor%Persönlich würde ich jedoch in diesem Fall die Verwendung von Kriterien vermeiden, da es sich nicht um eine dynamische Abfrage handelt, sondern stattdessen:
%Vor%Ich hatte ein ähnliches Problem, aber mit HQL behoben, ich habe eine Klasse "Enterprise", die mit der Klasse "User" und auch mit der Klasse "Role" verwandt ist, sie Heu eine Beziehung viele zu viele, wenn ich alle brauche die Unternehmen in Bezug auf einen bestimmten Benutzer Ich mache folgendes:
%Vor%Ich nehme an, dass Sie in Ihrem Fall etwas tun sollten wie:
%Vor%Ich hoffe, es hilft.
Eine weitere Option ist das Verknüpfen von Joins (ein Join pro LicenseClass). Ich habe Kriterien Builder und Prädikate wie folgt verwendet
%Vor%Hinweis dlRoot ist ein Objekt der Root-Klasse und Sie können es von der CriteriaQuery-Klasse abrufen. Das gesuchte Prädikat ist das, wonach Sie suchen ...
Tags und Links sql java hibernate many-to-many criteria