QueryDSL - 使用JPA将子查询添加到FROM语句中

时间:2016-12-31 03:45:08

标签: java spring-data-jpa querydsl

请您帮我使用JPA Query为SQL创建QueryDSL构造。我正在使用4.1.3。

SELECT * FROM (SELECT a FROM b WHERE a.z = 1) WHERE rownum <=1;

提到的解决方案对我不起作用QueryDSL - add subquery into FROM statement

提前致谢。

1 个答案:

答案 0 :(得分:0)

以下查询:

SELECT a FROM b WHERE a.z = 1

没有任何order by子句,因此将应用默认排序。根据{{​​3}} SO回答,不会预测排序。所以,我建议添加order by子句。

如果这仅是一个示例,并且实际查询包含order by,那么您可以在单个查询中实现类似的逻辑;而不是将其包装到另一个查询中并获得第一行,例如(SELECT a FROM b WHERE a.z = 1 order by z)rownum之类的内容。以下是通过JPA方式执行此操作的步骤:

  • 为该表编写一个存储库(您可以扩展PagingAndSortingRepository,因为它已有一些方法)
  • 编写一个接受findBy()参数的Pageble方法(以及z),它看起来像这样:public List<T> findByZ(int z, Pageable pageable)
  • 使用ZPageRequest来呼叫,例如:

    final PageRequest page1 = new PageRequest( 0, 1, Direction.ASC, "somefield" );

它将根据您正在使用的数据库应用limit/rownnum并为您提供记录。