Spring数据JPA nativeQuery排序依据无效

时间:2018-08-21 09:38:36

标签: java sql postgresql spring-boot spring-data-jpa

Spring Data Jpa方法如下:

someMethod(/* width */ 1024, /* height */ 768);

然后按“ max_borrow_amt desc”排序,但这无效。
该列表无序。

2 个答案:

答案 0 :(得分:2)

Spring Data JPA中的动态排序

如果您使用JPA查询,则可以使用Sort作为查询方法的参数来定义排序顺序:

@Query("select m from Model m")
List<Model> getSortedList(Sort sort);

然后,例如:

List<Model> models = getSortedList(Sort.by(Sort.Direction.DESC, "name"));

但是带有本地查询的Spring Data JPA can't use Sort

  

Spring Data JPA当前不支持对本机查询进行动态排序,因为它必须处理声明的实际查询,而这对于本机SQL无法可靠地完成。

不过,您可以改为使用Pageable及其实现PageRequest

@Query(value = "select m.name as name from models m", nativeQuery = true)
List<ModelProjection> getSortedList(Pageable p);

然后:

List<ModelProjection> modelNames = getSortedList(PageRequest.of(0, 1000, Sort.Direction.DESC, "name"));

P.S。与其使用Object数组作为返回参数,不如使用projections,例如:

public interface ModelProjection {
    String getName();
}

请注意,在这种情况下,好的做法是在查询中使用别名(即m.name as name)。它们必须与投影中的对应吸气剂匹配。

工作demotest

答案 1 :(得分:1)

谢谢大家! 我的问题已经解决了。

如果您想使用Spring data jpa nativeQuert&Sort,则应这样做:

@Query(           值=“从product_loan_basic pb左选择pb.id,pp.max_borrow_amt加入pb.code = pp.product_code上的product_loan_price pp排序依据?#{#pageable}”,           countQuery =“从product_loan_basic选择count(*)”,           nativeQuery = true   )   页面findAllProductsAndOrderByAndSort(Pageable pageable);

?#{#pageable}是必需的,countQuery是必需的。

Pageable pageable = new PageRequest(0,1000,Sort.Direction.DESC,"id");

然后对结果进行排序

请参阅Spring Data and Native Query with pagination