我面临通过某些(子)字符串搜索实体的简单问题,它们可能包含。
例如,我有用户 user1、usr2、useeeer3、user4,我将进入搜索窗口“use”,我希望返回 user1、useeer3、user4。
我相信你现在知道我的意思了。JPA(JQPL)中是否有任何构造?在命名查询中以某种方式使用 WHERE 进行搜索会很好。像“SELECT u FROM User u WHERE u.nickname contains :substring”之类的东西
使用LIKE
表达式。以下是JPA 1.0 规范 (JSR 220)第4.6.9节的引用:
在条件表达式中使用比较运算符的语法
[NOT] LIKE
如下:string_expression [NOT] LIKE pattern_value [ESCAPE escape_character]
string_expression 必须有一个字符串值。是
pattern_value
字符串文字或字符串值输入参数,其中下划线 (_) 代表任何单个字符,百分号 (%) 字符代表任何字符序列(包括空序列),所有其他字符代表他们自己。可选的 escape_character 是单字符串文字或字符值输入参数(即,char
或Character
),用于转义 中的下划线和百分比字符的特殊含义pattern_value
。例子是:
- address.phone LIKE '12%3' 对于 '123' '12993' 为真,对于 '1234' 为假</li>
- asentence.word LIKE 'l_se' 对 'lose' 为真,对 'loose' 为假</li>
- aword.underscored LIKE '\_%' ESCAPE '\' 对于 '_foo' 是 true,对于 'bar' 是 false</li>
- address.phone NOT LIKE '12%3' 对于 '123' 和 '12993' 是 false,对于 '1234' 是 true</li>
如果or 的值是
string_expression
or未知,则 LIKE 表达式的值是未知的。如果 指定 并且 is ,则 LIKE 表达式的值是未知的。pattern_value
NULL
escape_character
NULL