直到今天我才使用这句话:
@Query(value = "select top 5 p.*, sum(po.quantity) as total_quantity from product p " +
"inner join productorder po " +
"on p.id = po.product_id " +
"group by p.id, p.name " +
"order by total_quantity desc", nativeQuery = true)
List<Product> findTopFiveBestSellerNative();
在这里,我将返回类型定义为产品列表,我完全得到了我需要的东西。并且忽略所选列total_quantity。
最后,我需要将分页集成到此查询中。由于Spring不支持使用本机查询进行分页处理,我想先将此查询转换为JPQL(然后我将添加分页)。现在它看起来像这样:
@Query(value = "select p, sum(po.quantity) as total_quantity " +
"from Product p, ProductOrder po " +
"where p.id = po.pk.product " +
"group by p.id, p.name " +
"order by total_quantity desc")
List<Product> findTopFiveBestSeller();
返回类型现在是一个对象数组列表,其中数组的第一个元素是Product,第二个元素是total_quantity。 (虽然方法签名说List ..)
我如何更改我的陈述或以某种方式实现这一点,以便我不必处理数组,只是获取我的Product对象?
编辑:我有想法将此查询用作子查询,只需从子查询中选择产品即可。事实证明,JPQL不能在'from'子句中进行子查询。答案 0 :(得分:0)
事实上,您的查询不仅返回构建Product对象所需的列,因此Spring JPA将其映射到对象。
创建一个扩展产品并包含属性totalQuantity的聚合实体,并将查询映射到它(可能在另一个存储库中)