Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 满足这个JPQL需求_Jpa_Jpql_Spring Data Jpa - Fatal编程技术网

Jpa 满足这个JPQL需求

Jpa 满足这个JPQL需求,jpa,jpql,spring-data-jpa,Jpa,Jpql,Spring Data Jpa,要求:一个字符串的内容出现在另一个字符串中。这只测试整个单词,但允许多单词查询。例如,使用givenName:Jane的查询将使用givenName值为“Jane”和“Jane Ann”,而不是“Janet”的用户进行匹配。对givename:Mary Ann的多词查询将匹配“Mary Ann Evans”和“Sarah Mary Ann”的值,但不匹配“Ann Mary” 这就是我目前所拥有的。 我有一个SiteRepository扩展了JpaRepository接口,它包括以下方法 @Que

要求:一个字符串的内容出现在另一个字符串中。这只测试整个单词,但允许多单词查询。例如,使用
givenName:Jane
的查询将使用
givenName
值为“Jane”和“Jane Ann”,而不是“Janet”的用户进行匹配。对givename:Mary Ann的多词查询将匹配“Mary Ann Evans”和“Sarah Mary Ann”的值,但不匹配“Ann Mary”

这就是我目前所拥有的。 我有一个
SiteRepository
扩展了
JpaRepository
接口,它包括以下方法

@Query("SELECT s from Site s WHERE s.name LIKE :givenName")
public List<Site> findByName(@Param("givenName") String givenName);
所以如果我调用,
findByName(“:Jane”)
我应该得到以下JPQL查询:
从站点s中选择s,其中s.name像%Jane%,而不是像\u Jane\ucode>


然而,这是行不通的。任何帮助都将受到感谢。

我不是jpql方面的专家,因此我将在这里只写我的假设,这些假设不一定正确,但我会尽力帮助op

如果我的答案是错误的,那么请在答案上留言让我知道

我认为这个答案不应该被否决,因为我已经表明,我的答案不一定正确,如果不正确,我将删除它

这是我在不了解技术细节的情况下对问题的评论:


您应该编写一个查询,检查是否所有单词都是 现在,单词的第一个索引在单词的最后一个索引之前 下一个字


startIndex
开始搜索
searchString
candidateString
中的位置,索引从1开始。其思想是编写一个查询,检查locate是否返回除0以外的值
startIndex
,该值取决于前一个字符串的
startIndex
。()如果所有字符串都符合条件,则记录应包含在结果中。

我找到了解决方案。这似乎适用于我目前测试的案例


“从站点s中选择s,其中s.name不象'Jane',s.name不象'Jane',s.name不象'Jane',s.name象'%Jane%'”

您应该编写一个查询,检查是否所有单词都存在,并且单词的第一个索引在下一个单词的最后一个索引之前。好的,这很有意义。您介意告诉我如何编写这样的jpql查询吗?
public List<Site> findByName(String givenName) //Where Site is an entity with a name field.
return siteRepository.findByName("%" + givenName.substring(1, givenName.length()) + "%"  
                + " AND NOT LIKE _" + givenName.substring(1, givenName.length()) + "_");
LOCATE(searchString, candidateString [, startIndex])