9

我面临通过某些(子)字符串搜索实体的简单问题,它们可能包含。

例如,我有用户 user1、usr2、useeeer3、user4,我将进入搜索窗口“use”,我希望返回 user1、useeer3、user4。

我相信你现在知道我的意思了。JPA(JQPL)中是否有任何构造?在命名查询中以某种方式使用 WHERE 进行搜索会很好。像“SELECT u FROM User u WHERE u.nickname contains :substring”之类的东西

4

1 回答 1

14

使用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 是单字符串文字或字符值输入参数(即,charCharacter),用于转义 中的下划线和百分比字符的特殊含义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_expressionor未知,则 LIKE 表达式的值是未知的。如果 指定 并且 is ,则 LIKE 表达式的值是未知的。pattern_valueNULLescape_characterNULL

于 2010-05-01T00:55:43.947 回答