如何使用Sum SQL和Spring Data JPA组?

akc*_*soy 6 sql spring jpql spring-data

我想按数量加载畅销产品.这些是我的表:

Product
id  name
1    AA   
2    BB

Productorder
order_id  product_id  quantity
1          1          10      
2          1          100    
3          2          15     
4          1          15       
Run Code Online (Sandbox Code Playgroud)

这是我的Spring Data Repository:

@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {

    @Query(value = "select top 5 p.name, 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> findTopFiveBestSeller();
}
Run Code Online (Sandbox Code Playgroud)

我收到HsqlException:找不到列:id

我认为这个错误与id列没有任何关系,因为它存在于两个表中."按分组查询分组"是否适用于Spring数据?因为对我来说这似乎有点奇怪,因为Spring Data应该只从数据库中选择产品属性,并且使用这个sql我们也选择总和(po.quantity).Spring数据可以处理这个并将结果转换为List吗?

PS:我使用的是嵌入式数据库的HSQLDB.

akc*_*soy 5

将 select 语句的投影从 更改p.namep.*以指示我正在选择多个值而不仅仅是必须神奇地转换为Product对象的String对象后,这有效:

@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {

    @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> findTopFiveBestSeller();

}
Run Code Online (Sandbox Code Playgroud)

谢谢@JMK 和@JB Nizet。

  • 您好,那么您是否在 Product bean 中创建了total_quantity 列?我需要做类似的事情..你能详细说明一下你的bean级别有什么吗? (2认同)