Ich denke nicht, dass es möglich ist, der linke Teil eines LIKE
soll ein string_expression sein (im Standard JPA). Aus der Spezifikation:
4.6.9 Like-Ausdrücke
Die Syntax für die Verwendung des Vergleichsoperators [NOT] LIKE in einem bedingten Ausdruck lautet wie folgt:
string_expression [NOT] LIKE pattern_value [ESCAPE escape_character]
Der string_expression muss einen Zeichenkettenwert haben. Der pattern_value ist ein Zeichenkettenliteral oder ein zeichenkettenwertiger Eingabeparameter, in dem ein Unterstrich (_) für ein einzelnes Zeichen steht, ein Prozentzeichen (%) für eine beliebige Zeichenfolge (einschließlich der leeren Zeichenfolge) und alle anderen Zeichen für sich selbst. Der optionale escape_character ist ein Zeichenkettenliteral mit einem einzelnen Zeichen oder ein zeichenwertiger Eingabeparameter (d. h. char
oder Character
) und wird verwendet, um die besondere Bedeutung der Unterstrich- und Prozentzeichen im pattern_value zu escapen.
Und ein enum_expression ist kein string_expression.
Das Folgende würde jedoch funktionieren (mit Verwendung von enum literals):
SELECT f
FROM Foo f
WHERE f.bar = com.acme.Bar.SOME_CONSTANT
OR f.bar = com.acme.Bar.SOME_OTHER_CONSTANT
Eine weitere Möglichkeit wäre es, das Feld bar
tatsächlich als String
zu speichern (und eine Konvertierung von und zu einem Enum im Getter/Setter durchzuführen).
Referenz
- JPA 1.0 Spezifikation
- Abschnitt 4.6.9 "Like-Ausdrücke"
- Abschnitt 4.14 "BNF"