JPQL可以对枚举执行LIKE表达式吗?
如果我有一个带有枚举字段栏的实体Foo,我可以在MySQL中执行以下操作(条形存储为MySQL枚举)...
SELECT * FROM Foo WHERE `bar` LIKE '%SUFFIX'
Run Code Online (Sandbox Code Playgroud)
但是,JPQL中的相应查询...
SELECT f FROM Foo f WHERE f.bar LIKE '%SUFFIX'
Run Code Online (Sandbox Code Playgroud)
......抱怨......
Parameter value [%SUFFIX] was not matching type [com.example.Foo$EnumType]
Run Code Online (Sandbox Code Playgroud)
我不认为这是可能的,a的左边部分LIKE应该是string_expression(在标准JPA中).从规格:
4.6.9像表达式一样
在条件表达式中使用比较运算符[NOT] LIKE的语法如下:
Run Code Online (Sandbox Code Playgroud)string_expression [NOT] LIKE pattern_value [ESCAPE escape_character]该string_expression必须有一个字符串值.所述pattern_value是一个字符串或其中的下划线(_)代表任何单个字符一个字符串值的输入参数,百分比(%)字符表示任何字符序列(包括空序列),而所有其他字符站为了自己.可选ESCAPE_CHARACTER是单字符串文字或字符值输入参数(即,
char或Character),并用于逃避下划线和百分比字符的特殊含义pattern_value.
并且enum_expression不是string_expression.
以下将工作(使用枚举文字):
SELECT f
FROM Foo f
WHERE f.bar = com.acme.Bar.SOME_CONSTANT
OR f.bar = com.acme.Bar.SOME_OTHER_CONSTANT
Run Code Online (Sandbox Code Playgroud)
另一种选择是将bar字段实际存储为String(并在getter/setter中对枚举进行一些转换).