Я не думаю, что это возможно, левая часть LIKE
должна быть string_expression (в стандартном JPA).Из спецификации:
4.6.9 Подобные выражения
Синтаксис использования оператора сравнения [NOT] LIKE в условном выражении следующий:
string_expression [NOT] LIKE pattern_value [ESCAPE escape_character]
string_expression должно иметь строковое значение. pattern_value является строковым литералом или строковым входным параметром, в котором подчеркивание (_) обозначает любой отдельный символ, символ процента (%) обозначает любую последовательность символов (включая пустую последовательность)и все остальные персонажи стоят за себя.Необязательный escape_character представляет собой односимвольный строковый литерал или символьный входной параметр (т. Е. char
или Character
) и используется для удаления специального значения символов подчеркивания и процентов в pattern_value .
И enum_expression не является string_expression .
Следующее будет работать, хотя (используя литералы enum ):
SELECT f
FROM Foo f
WHERE f.bar = com.acme.Bar.SOME_CONSTANT
OR f.bar = com.acme.Bar.SOME_OTHER_CONSTANT
Другим вариантом будет сохранение поля bar
в виде String
(и некоторое преобразование из и в перечисление в получателе /setter).
Ссылка
- JPA 1.0 Спецификация
- Раздел 4.6.9 "Подобные выражения"
- Раздел 4.14 "BNF"