我正在尝试使用动态顺序,但检索到的列表未排序 [英] I am trying to use dynamic order by but the list retrieved is not ordered

查看:26
本文介绍了我正在尝试使用动态顺序,但检索到的列表未排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

public List<Series> findSeries(int period, String fieldname, int num) {
    TypedQuery<Series> query = em.createQuery(
            "select s from Series s where  s.period = ?1 order by ?2",
            Series.class);
    query.setParameter(1, period);
    query.setParameter(2, fieldname);
    query.setMaxResults(num);
    return query.getResultList();
}

这是我正在使用的方法.我认为 order by 甚至没有被执行,即使我传递了不正确的字段名,它也不会出现任何错误.

This is the method I am using. I think order by isn't even getting executed, it doesn't give any error even when I pass incorrect fieldname.

推荐答案

当涉及到动态限制和排序时,最好使用 PagingAndSortingRepository 所以现在我的 Repository 扩展了这个存储库.我可以简单地使用 JPA 条件查询,如下所示.

When it comes to dynamic limit and ordering, its best to use PagingAndSortingRepository so now my Repository extends this repository. I can simply use JPA criteria query as below.

如果您想了解有关 JPA 标准查询的更多信息,我发现这非常有帮助 http://docs.spring.io/spring-data/data-jpa/docs/1.0.x/reference/html/#jpa.query-methods.query-creation

If u want to learn more about JPA criteria query i found this very helpful http://docs.spring.io/spring-data/data-jpa/docs/1.0.x/reference/html/#jpa.query-methods.query-creation

 @Repository
public interface SeriesRepository extends PagingAndSortingRepository<Series,Long>{
List<Series> findByPeriod(int period, Pageable pageable);
}

然后当我从我的 dao 调用这个方法时,我可以实例化 PageRequest,它是 Pageable 的实现之一.我可以为这个实例添加限制和排序顺序.

And then when I call this method from my dao i can just instantiate PageRequest which is one of the implementation of Pageable. I can add limit and sorting order to this instance.

public List<Series> getSeriesByFilter(int period, String fieldname, int num) {
    Sort sort = new Sort(Sort.Direction.ASC, fieldname);
    Pageable pageable = new PageRequest(0, num, sort);
    return seriesRepo.findByPeriod(period, pageable);
}

这篇关于我正在尝试使用动态顺序,但检索到的列表未排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆