JPA 2 und Hibernate 3.5.1 MEMBER OF Query funktioniert nicht

8

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%     
Ed_Zero 22.04.2010, 01:34
quelle

4 Antworten

10

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 MEMBER OF in einem collection_member_expression lautet wie folgt:

%Vor%      

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 ist FALSE und der Wert   der NOT 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 :

%Vor%

Update: berichtet in HHH-5209

>     
Pascal Thivent 22.04.2010, 03:58
quelle
7

Hibernate Bug # HHH-5209 , Als Workaround verwenden Sie die folgende Syntax:

%Vor%     
peterbrown 19.03.2012 11:09
quelle
3

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!

    
bvarner 15.03.2012 02:36
quelle
0

Ich denke, member of kann nicht mit einer @ElementCollection -Eigenschaft verwendet werden.

    
Behrang 22.04.2010 02:16
quelle

Tags und Links