5

我正在使用Datatables jQuery 插件来显示订单位置列表。在调试我的应用程序时,我偶然发现了以下不一致之处。

为了检索数据,我使用@Query-Notation 进行自定义查询:

@Query("select op from OrderPosition  " +
        "op where op.order.created >= ?1" +
        " and op.depot in ?2" +
        " and op.order.deliveryAddress.deliveryMode in ?3" +
        " and op.pickStatus in ?4 and op.order.id like ?5 ")
Page<OrderPosition> findOrderpositionsByFilterStatus(Date date, List<Integer>depots, List<DeliveryMode> deliveryModes, List<ArticleStatusType> pickStatus, String sSearch, Pageable p);

发生的错误如下:

我有一组 81 个 Orderpositions 测试数据。在前端,我可以按几个标准进行过滤。标准之一是deliveryMode(表达|标准)。我一次显示 10 个条目。交付总数express为 6。当翻阅页面时,仅express显示 2 个。当我明确过滤时,express我得到了所有 6。

当我添加某种排序时,例如:

@Query("select op from OrderPosition  " +
        "op where op.order.created >= ?1" +
        " and op.depot in ?2" +
        " and op.order.deliveryAddress.deliveryMode in ?3" +
        " and op.pickStatus in ?4 and op.order.id like ?5 " +
        "order by op.order.id desc")
Page<OrderPosition> findOrderpositionsByFilterStatus(Date date, List<Integer>depots, List<DeliveryMode> deliveryModes, List<ArticleStatusType> pickStatus, String sSearch, Pageable p);

我得到了所有6个。

是什么让我想到了这个问题:

当使用非注释查询时——无论是通用findAll()查询还是来自方法名称的查询——Spring-Data-JPAorder by在检测到pageable? 或相反:order by当使用pageable?

4

1 回答 1

2

是的。OrderBy如果您没有进一步指定,Spring Data 使用(带有默认 desc)。查看日志:

SELECT t0.oid, t0.jpaversion, t0.amount, [...]
FROM [...]
WHERE [..] AND (t13.jpatype IS NULL OR t13.jpatype IN (?))
ORDER BY t0.oid DESC LIMIT ?, ?
于 2013-09-12T13:29:37.390 回答