ベストセラー商品を数量で積み込みたい。これらは私のテーブルです:
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を使用しています。
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に感謝します。