Spring Data JPA Repository在使用Sum Function时返回Object []而不是MyType

时间:2014-12-22 23:01:12

标签: spring jpa spring-data jpql spring-data-jpa

直到今天我才使用这句话:

@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'子句中进行子查询。

1 个答案:

答案 0 :(得分:0)

事实上,您的查询不仅返回构建Product对象所需的列,因此Spring JPA将其映射到对象。

创建一个扩展产品并包含属性totalQuantity的聚合实体,并将查询映射到它(可能在另一个存储库中)