JPQL和Enum.如果您需要任何枚举



我有一个JPQL查询,其中一次包含多个过滤器和排序。

@Query("SELECT rest FROM Restaurant rest LEFT JOIN rest.votes vote " +
"WHERE (rest.name LIKE concat('%', :searchQuery, '%') OR rest.address LIKE concat('%', :searchQuery, '%')) " +
"AND rest.cuisine = :cuisine " +
"GROUP BY rest.id ORDER BY COUNT(vote.id) DESC")
Page<Restaurant> findAllSortedByRating(@Param("searchQuery") String searchQuery, 
@Param("cuisine") СuisineType cuisine, 
Pageable pageable);
}

在第三行查询中,:cuisine是Enum。当用户选择了其中一个选项时,一切都很好,但是如果他想看到所有的选项呢?

例如,对于searchQuery,我只是传递一个空字符串并获得整个列表。当然,这是不可能的枚举,但也许有一种方法来实现这样的功能?

到目前为止,我只创建了两个方法,其中一个没有this行,但这并不美观,因为代码是重复的。

您可以使用is null

AND (rest.cuisine = :cuisine or :cuisine is null)

或者可以加上СuisineType.ALL

AND (rest.cuisine = :cuisine or :cuisine = com.demo.СuisineType.ALL)

最新更新