簡體   English   中英

枚舉上的JPQL LIKE表達式

[英]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是單字符字符串文字或字符值輸入參數(即charCharacter ),用於轉義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 1.0規范
    • 第4.6.9節“像表達式”
    • 第4.14節“BNF”

您使用的JPA提供商和版本是什么?

這應該在EclipseLink 2.1中有效。

否則,您可以嘗試將函數應用於枚舉以將其更改為varchar,或使用本機SQL,或將其映射為String。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM