Abfrage für Hibernate-Kriterien für Collection Table?

8

Ich habe folgende Entität

%Vor%

Folgendes ist meine Aktion

%Vor%

Ich möchte eine Liste von Regeln mit bestimmten Aktionen abrufen Ich versuche das

%Vor%

Aber bekommen org.hibernate.MappingException: collection war keine association: exception ..

BEARBEITEN Nach der Anleitung von jbrookover habe ich versucht, eine Wrapper-Klasse für Action namens RuleAction zu erstellen und konnte die oneToMany-Beziehung wiederherstellen. Außerdem habe ich die Abfrage wie folgt geändert:

%Vor%

Aber das gibt mir alle Regeln zurück, die entweder EMAIL oder POSTAL haben, aber was ich will, ist alle Regeln, die E-MAIL und POST beide haben Bitte hilf mir die Abfrage zu modifizieren.

    
Anupam Gupta 07.10.2011, 12:42
quelle

3 Antworten

6

Entschuldigung, was Sie gerade versuchen, wird in Hibernate nicht unterstützt. Siehe diese FAQ:

Ссылка

Ich war auch ziemlich unzufrieden damit. Wie Sie jedoch sehen können, haben sie versucht, das Problem zu beheben. Sie konnten es nicht mehr tun und haben es der Community übertragen, damit umzugehen. Sie haben einige Optionen:

  1. Verwenden Sie HQL, um die Abfrage auszuführen.
  2. Schreiben Sie Ihre Auflistungszuordnung als tatsächliche Entitätsklasse mit einem einzelnen Enum-Feld neu.

Sie können so etwas tun:

%Vor%

Aktualisieren Sie dann Ihre Verknüpfungen und fragen Sie entsprechend, so dass Rule eine Set<ActionWrapper> hat. Es gibt andere Problemumgehungen, aber Sie können Criteria und @ElementCollection im Wesentlichen nicht zusammen verwenden.

Aktualisieren

Um die Abfrage weiter einzuschränken, um sicherzustellen, dass Sie Regeln erhalten, die BOTH-Aktionen erfüllen, müssen Sie die Unterabfrage ausführen und eine Konjunktion - 'und' - der übereinstimmenden Werte ausführen. So etwas sollte funktionieren:

%Vor%

Am Ende können Sie doppelte Ergebnisse finden. Dies ist üblich und kann eliminiert werden, indem Sie Folgendes hinzufügen:

%Vor%

Ich kann nicht für die Effizienz dieses Codes sprechen - HQL kann auf lange Sicht besser sein. Ich habe jedoch in anderen Projekten etwas Ähnliches gemacht und habe keine Probleme festgestellt.

    
jbrookover 10.10.2011, 06:34
quelle
3

Eine andere Lösung, ohne Ihre enums zu verpacken und ResultTransformers zu verwenden, ist dies:

%Vor%

Abfrage:

%Vor%

Das hat bei Hibernate 4.1.6.Final für mich funktioniert. Ich fand es hier .

    
schnatterer 06.03.2013 17:22
quelle
1

Die Kriterienabfrage sieht gut aus. Angenommen, wir haben Tabellen:

%Vor%

Das Mapping sollte wie folgt aussehen:

%Vor%

Auf diese Weise sollte Ihre Kriterienabfrage funktionieren.

    
forker 07.10.2011 23:33
quelle

Tags und Links