我正在使用Datatables jQuery插件来显示orderpositions列表。 在调试我的应用程序时,我偶然发现了以下不一致。
要检索数据,我使用@Query
- 表示法进行自定义查询:
@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.当在页面中进行分页时,仅显示2 express
。在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-JPA在内部使用order by
- 子句时,检测到pageable
时?或者反过来:当使用order by
时,我是否必须在每个自定义查询中添加pageable
- 子句?
答案 0 :(得分:2)
是的。如果不进一步指定,Spring Data将使用OrderBy
(使用默认的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 ?, ?