ManyToMany-Beziehung mit Hibernate-Kriterien abfragen

9

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?"

    
Daniel Alexiuc 05.11.2008, 04:25
quelle

5 Antworten

5

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.

    
WhyCantIAnswerMyOwnQuesti 23.11.2008, 22:22
quelle
0

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%     
Nick 05.11.2008 05:44
quelle
0

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.

    
Nelson Miranda 12.11.2008 03:12
quelle
0

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 ...

    
Mara B 04.10.2016 12:13
quelle
-1

Ich glaube nicht, dass das funktionieren wird. Ich möchte alle Lizenzen finden, die beide "Auto" und "Motorrad"

haben

User Expression.and (....) anstelle von Expression.or (....) im Snippet von Nick

    
Adi 07.11.2008 08:48
quelle