JPQL(JPA)搜索子字符串

Jav*_*ner 9 java orm jpa jpql

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

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

我相信你现在知道我的意思了.JPA(JQPL)有任何建设吗?在命名查询中以某种方式使用WHERE进行搜索会很不错.类似于"SELECT u FROM User u WHERE u.nickname contains:substring"

Pas*_*ent 14

使用LIKE表达式.以下是4.6.9类似 JPA 1.0规范表达式(JSR 220)的引用:

[NOT] LIKE在条件表达式中使用比较运算符的语法如下:

string_expression [NOT] LIKE pattern_value [ESCAPE escape_character]
Run Code Online (Sandbox Code Playgroud)

string_expression必须具有字符串值.它pattern_value是一个字符串文字或字符串值输入参数,其中下划线(_)代表任何单个字符,百分号(%)代表任何字符序列(包括空序列),所有其他字符代表他们自己.可选的escape_character是单字符字符串文字或字符值输入参数(即charCharacter),用于转义下划线和百分比字符的特殊含义pattern_value.

例如:

  • address.phone LIKE '12%3'适用于'123''12993',false适用于'1234'
  • asentence.word LIKE'l_se'对于'lost'是真的而对于'loose'是假的
  • aword.underscored LIKE'\ _%'ESCAPE'\'对于'_foo'为真,对于'bar'为false
  • address.phone NOT LIKE '12%3'对于'123'和'12993'为false,对于'1234'为true

如果string_expressionpattern_valueNULL或未知,则LIKE表达式的值是未知的.如果 escape_character指定且是 NULL,则LIKE表达式的值未知.