web-dev-qa-db-ja.com

Spring DataJPAでSumSQLによるグループを使用するにはどうすればよいですか?

ベストセラー商品を数量で積み込みたい。これらは私のテーブルです:

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       

これは私のSpringデータリポジトリです:

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

HsqlException:列が見つかりません:idを取得しています

このエラーは両方のテーブルに存在するため、id列とは何の関係もないと思います。 「groupbySumクエリ」はSpringデータで機能しますか? Spring Dataはデータベースから製品属性のみを選択する必要があるため、私には少し奇妙に思えます。このSQLでは、sum(po.quantity)も選択しています。 Springデータはこれを処理し、結果をリストとして変換できますか?

PS:DBとして埋め込まれたHSQLDBを使用しています。

6
akcasoy

Selectステートメントの射影をp.nameからp.*に変更して、魔法のように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();

}

@JMKと@JBNizetに感謝します。

4
akcasoy