首页 > 解决方案 > 如何将订单方向添加到@Query HQL。(升序/降序)

问题描述

我有工作 HQL 代码:

@Query("SELECT prod FROM Product as prod ORDER BY prod.rating ASC")
    List<Product> findProductsByRatingASC();

但我需要获取按评级排序的产品列表(按降序或升序)。

我需要类似的东西:

@Query("SELECT prod FROM Product as prod ORDER BY prod.rating ?1")
    List<Product> findProductsByRating(String orderDir);

orderDir 可能在哪里ASCDESC

标签: springhibernatehql

解决方案


很可能在幕后@Query只是使用准备好的语句来实现。不能使用绑定参数来控制ORDER BY子句的方向。这里的一种解决方法是只维护两个单独的查询,一个用于每个排序方向:

@Query("SELECT prod FROM Product as prod ORDER BY prod.rating")
List<Product> findProductsByRatingASC();

@Query("SELECT prod FROM Product as prod ORDER BY prod.rating DESC")
List<Product> findProductsByRatingDESC();

然后,在您的应用程序代码中,检查传入的排序方向并调用适当的方法,例如

String order = "ASC";
if ("ASC".equals(order))  {
    findProductsByRatingASC();
}
else {
    findProductsByRatingDESC();
}

推荐阅读