JPA Query等同于查找关键字中最常出现的10个SQL查询

时间:2018-12-02 22:36:35

标签: java sql hibernate jpa spring-data-jpa

我正在尝试编写一个查询,该查询输出(限制)关键字匹配量最高的前10条记录。我的SQL查询如下:

SELECT * 
FROM wine 
WHERE
    description LIKE '%dry%'
    OR description LIKE '%depth%'
    OR description LIKE '%strong%'
    OR description LIKE '%spicy%'
ORDER BY
    IF(description LIKE '%dry%',1,0)+
    IF(description LIKE '%depth%',1,0)+
    IF(description LIKE '%strong%',1,0)+ 
    IF(description LIKE '%spicy%',1,0)
DESC LIMIT 10;

此查询的工作方式是查找描述与关键字(干燥,深度,浓烈,辛辣)匹配的前10条记录,然后按这些单词的出现次数对其进行排序。

我正在尝试编写等效的JPA查询,但相对来说还比较陌生。最好在@Query中使用WineRepository参数,还是应该在我的WineService文件中用Java对这种逻辑进行硬编码?

1 个答案:

答案 0 :(得分:0)

Pageable是您要寻找的。如果要将@Query批注与设置最大结果结合在一起,

public interface WineRepository extends PagingAndSortingRepository<Wine,Long> {
  @Query("select * from wine where ...")
  List<Wine> findAllWinesWhereKeywordLikes(Pageable pageable);

  default List<Wine> findTop10WinesWhereKeywordLikes() {
    return findAllWinesWhereKeywordLikes(new PageRequest(0,10));
  }

}
  

在WineRepository中使用@Query参数是最好的选择   在这里还是应该在我的WineService中使用Java对这种逻辑进行硬编码   文件?

事实上,最好在服务中创建一个获取关键字列表的方法,然后在存储库中使用这些关键字进行搜索。因为也许以后您需要用更多的关键词搜索(干,深,浓,辣),并且您可以在任何需要的地方重复使用服务方法。