Java 枚举上的类JPQL表达式
JPQL能否针对枚举执行类似的表达式 如果我有一个带有枚举字段栏的实体Foo,我可以在MySQL中执行以下操作(bar存储为MySQL枚举) 但是,JPQL中的相应查询Java 枚举上的类JPQL表达式,java,orm,jpa,jpql,Java,Orm,Jpa,Jpql,JPQL能否针对枚举执行类似的表达式 如果我有一个带有枚举字段栏的实体Foo,我可以在MySQL中执行以下操作(bar存储为MySQL枚举) 但是,JPQL中的相应查询 SELECT f FROM Foo f WHERE f.bar LIKE '%SUFFIX' ……抱怨 Parameter value [%SUFFIX] was not matching type [com.example.Foo$EnumType] 我认为这是不可能的,像这样的的左边应该是一个字符串表达式(在标准JPA
SELECT f FROM Foo f WHERE f.bar LIKE '%SUFFIX'
……抱怨
Parameter value [%SUFFIX] was not matching type [com.example.Foo$EnumType]
我认为这是不可能的,像这样的
的左边应该是一个字符串表达式(在标准JPA中)。根据规范:
4.6.9类似的表达
使用的语法
比较运算符[不]类似于
条件表达式如下所示:
string_expression [NOT] LIKE pattern_value [ESCAPE escape_character]
字符串_表达式必须具有
字符串值。模式_值为
字符串文字或字符串值
输入参数,其中下划线
()代表任何单个字符,
百分比(%)字符表示任何
字符序列(包括
空序列),以及所有其他
人物代表他们自己。这个
可选的转义字符是
单字符串文字或
字符值输入参数
(即,char
或Character
)并且
用来逃避
下划线和百分比字符
在模式_值中
枚举表达式不是字符串表达式
不过,以下操作可以(使用枚举文字):
另一个选项是将栏
字段实际存储为字符串
(并在getter/setter中执行从枚举到枚举的转换)
参考文献
- JPA1.0规范
- 第4.6.9节“类似表达”
- 第4.14节“BNF”
您使用的JPA提供商和版本是什么
这应该在EclipseLink 2.1中起作用
否则,您可以尝试将函数应用于枚举以将其更改为varchar,或者使用本机SQL,或者将其映射为字符串。我目前正在使用Hibernate,但我尝试使用纯JPA/JPQL。我最后检查了被查询字段的类型(通过JPA2.0标准API)。如果类型是可从Enum分配的,那么我将users参数强制转换为相应的Enum值。回答得好
string_expression [NOT] LIKE pattern_value [ESCAPE escape_character]
SELECT f
FROM Foo f
WHERE f.bar = com.acme.Bar.SOME_CONSTANT
OR f.bar = com.acme.Bar.SOME_OTHER_CONSTANT