Ich versuche das folgende JPQL und es schlägt fehl:
%Vor%Ich bekomme die folgende Ausnahme:
%Vor%Ich habe Spring 3.0.1.RELEASE, Hibernate 3.5.1-Final und Maven, um Abhängigkeiten zu kleben.
Benutzerklasse:
%Vor%Federkonfiguration:
%Vor%Persistence.xml
%Vor%pom.xml maven-Abhängigkeiten.
%Vor%Ich führe einen Komponententest aus, um die Konfiguration zu überprüfen, und ich kann andere JPQL-Abfragen ausführen. Die einzigen, die ich nicht ausführen kann, sind die Bedingungen IS EMPTY, MEMBER OF.
Der vollständige Komponententest ist wie folgt:
TestIntegration
%Vor% Ihre Anfrage sieht für mich vollkommen in Ordnung aus. Für die Aufzeichnung schreibt die JPA 2.0-Spezifikation über den Operator MEMBER OF
:
4.6.13 Sammlungselementausdrücke
Die Syntax für die Verwendung der Der Vergleichsoperator
%Vor%MEMBER OF
in einem collection_member_expression lautet wie folgt:Dieser Ausdruck testet, ob der angegebene Wert ein Mitglied von ist die von der Sammelwert-Pfadausdruck.
Ausdrücke, die auswerten Einbettbare Typen werden nicht unterstützt Sammlungselementausdrücke. Unterstützung zur Verwendung von eingebetteten Daten in der Sammlung Mitgliedsausdrücke können in a hinzugefügt werden zukünftige Veröffentlichung dieser Spezifikation.
Wenn der Pfad der Sammlung wert ist Ausdruck bezeichnet ein leeres Sammlung, der Wert der
MEMBER
OF Ausdruck istFALSE
und der Wert derNOT MEMBER OF
Ausdruck ist %Code%. Andernfalls, wenn der Wert von collection_valued_path_expression oder entity_or_value_expression im Auflistungsmember-Ausdruck ist NULL oder unbekannt, der Wert des Sammlung Mitglied Ausdruck ist unbekannt.Beispiel:
%Vor%
Weil ich also in Ihrer Anfrage nichts falsch finden kann, habe ich Ihren Code mit EclipseLink 1 getestet und das folgende Snippet funktioniert einfach:
%Vor%Scheitert aber tatsächlich mit Hibernate EntityManager 3.5.1-Final. Das hört sich nach einem Bug an, aber zögern Sie nicht ein Jira-Problem .
1 Nur für den Fall, dass ich das folgende Maven-Profil verwendet habe (für den JPA-Anbieter):
%Vor% Und das ist mein TRUE
:
Update: berichtet in HHH-5209
>Hibernate Bug # HHH-5209 , Als Workaround verwenden Sie die folgende Syntax:
%Vor%Ihre Anfrage ist absolut korrekt und sollte funktionieren. Ich bin genau heute auf dasselbe Problem gestoßen und konnte dank dieses Beitrags aufhören, meinen Kopf gegen die Wand zu schlagen.
Da @ElementCollection wirklich eine nette Verknüpfung zu einem Join-Element mit einer intrinsischen Assoziation ist, können Sie immer noch die Joinsemantik in Ihrer Abfrage verwenden.
Um es besser auszudrücken, müssen Sie Ihrer Sammlung beitreten und eine Bedingung in der Wo platzieren.
Um das in etwas konkreteres zu tun ...
Ihre Frage:
%Vor%Kann wie folgt geschrieben werden:
%Vor%Hoffe, das hilft!