[英]JPQL LIKE expression on enum
JPQL可以對枚舉執行LIKE表達式嗎?
如果我有一個帶有枚舉字段欄的實體Foo,我可以在MySQL中執行以下操作(條形存儲為MySQL枚舉)...
SELECT * FROM Foo WHERE `bar` LIKE '%SUFFIX'
但是,JPQL中的相應查詢...
SELECT f FROM Foo f WHERE f.bar LIKE '%SUFFIX'
......抱怨......
Parameter value [%SUFFIX] was not matching type [com.example.Foo$EnumType]
我不認為這是可能的, 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 。
以下將工作(使用枚舉文字 ):
SELECT f
FROM Foo f
WHERE f.bar = com.acme.Bar.SOME_CONSTANT
OR f.bar = com.acme.Bar.SOME_OTHER_CONSTANT
另一種選擇是將bar
字段實際存儲為String
(並在getter / setter中對枚舉進行一些轉換)。
您使用的JPA提供商和版本是什么?
這應該在EclipseLink 2.1中有效。
否則,您可以嘗試將函數應用於枚舉以將其更改為varchar,或使用本機SQL,或將其映射為String。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.