我有一个搜索功能,可以处理多个搜索文本。现在,我想在数据库中查询至少包含搜索文本之一的项目。
对于一种搜索文字,我使用以下内容:
import org.springframework.data.jpa.repository.Query;
@Query("SELECT m FROM Material m WHERE m.productName LIKE %:searchText%")
对于搜索文本的集合,我尝试过:
@Query("SELECT m FROM Material m WHERE m.productName IN (:searchTexts)")
我面临的问题是,现在只有确切的productName匹配查询。但是我也在寻找部分比赛。像这样:
@Query("SELECT m FROM Material m WHERE m.productName IN (%:searchTexts%)")
可以使用JPQL还是必须使用QueryDSL?
答案 0 :(得分:0)
在阅读了可能的重复和许多其他线程之后,我遇到了MySQL的“ RLIKE”功能。 首先,这是一个MySQL函数,据我所知,它不是标准JPQL或HQL的一部分。为了能够使用它,我创建了一个自定义的MySQLDialect:
@Query("SELECT m FROM Material m WHERE function('REGEX_LIKE', m.productName, :searchTexts) = 1 "
List<Material> findByProductName(@Param("searchTexts") String searchTexts);
这是@Query:
List<String> searchTexts = Arrays.asList("abc", "xyz");
String joinedSearchTexts = String.join("|", searchTexts);
List<Material> searchResult = findByProductName(joinedSearchTexts);
作为参数,可以使用由管道连接的搜索文本字符串。
a