Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.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
Java 如何使用JPA查询在同一字段中选择数量可变的相似字符串?_Java_Sql_Spring_Spring Data Jpa_Jpql - Fatal编程技术网

Java 如何使用JPA查询在同一字段中选择数量可变的相似字符串?

Java 如何使用JPA查询在同一字段中选择数量可变的相似字符串?,java,sql,spring,spring-data-jpa,jpql,Java,Sql,Spring,Spring Data Jpa,Jpql,为了在同一个字段上找到一组可变的文本(like或query),我正在尝试在spring中使用JPA查询进行like查询 在SQL语言中: SELECT * FROM A WHERE text LIKE '%A%' OR text LIKE '%B%' OR text LIKE '%C%'.... (Variable number) 在JPA中,它可能与此类似(这不是真正的代码,它是预期工作的主要思想): @Query(“从表t中选择t,其中t.text类似于:setOfTerms”) pag

为了在同一个字段上找到一组可变的文本(like或query),我正在尝试在spring中使用JPA查询进行like查询

在SQL语言中:

SELECT * FROM A WHERE text LIKE '%A%' OR text LIKE '%B%' OR text  LIKE '%C%'.... (Variable number)
在JPA中,它可能与此类似(这不是真正的代码,它是预期工作的主要思想):

@Query(“从表t中选择t,其中t.text类似于:setOfTerms”)
pagefindtweetsnotparsed(@Param(“setOfTerms”)设置为likequiry,Pageable Pageable);
对于JPA查询,是否有任何技术或方法可以做到这一点


编辑:由于like查询中的错误,我已编辑了该问题。我写了,但我想写

,nativeQuery=True在MySQL中,您可能需要在将术语集传递到查询之前对其进行处理,以便生成类似

... text LIKE '%A%B%C%
因此,您的示例代码可以变成:

Page<Example> findTweetsNotParsed(Set<String> likeTerms, Pageable pageable) {
   return executeTweetsNotParsed(String.join("%", likeTerms),pageable)
}

@Query("SELECT t FROM table t WHERE t.text LIKE :setOfTerms")
    Page<Example> executeTweetsNotParsedQuery(@Param("setOfTerms")String likeQuery, Pageable pageable);
您可能需要根据自己的具体需要手工编写regex gen代码


顺便说一句,你可以在Postgres中使用“类似于”操作符实现同样的功能。

你使用的是什么数据库服务器?@JoeW我使用的是MySQLSorry我放了什么,我想放在什么地方。我编辑我的问题。对不起,我弄错了。您的解决方案是和喜欢的好解决方案!!谢谢For OR做同样的事情,但使用REGEXP。@Martin更新了一个OR选项,我认为该选项在方向上是正确的。似乎REGEXP不允许作为正常的Spring JPA函数。在这种情况下,您必须在查询文本中设置分页,并设置开始/结束参数。不知道还有别的办法
Page<Example> findTweetsNotParsed(Set<String> likeTerms, Pageable pageable) {
   return executeTweetsNotParsed(String.join("%", likeTerms),pageable)
}

@Query("SELECT t FROM table t WHERE t.text LIKE :setOfTerms")
    Page<Example> executeTweetsNotParsedQuery(@Param("setOfTerms")String likeQuery, Pageable pageable);
Page<Example> findTweetsNotParsed(Set<String> likeTerms, Pageable pageable) {
       String regex = ".*"+String.join(".*|.*", likeTerms)+".*";
       return executeTweetsNotParsed(regex, pageable)
    }

@Query(value = "SELECT t FROM table t WHERE t.text REGEXP (:setOfTerms)", nativeQuery=true)
    Page<Example> executeTweetsNotParsedQuery(@Param("setOfTerms")String likeQuery, Pageable pageable);
... text REGEXP '.*A.*|.*B.*|.*C.*"