如何通过 Sum SQL 与 Spring Data JPA 一起使用组?
Posted
技术标签:
【中文标题】如何通过 Sum SQL 与 Spring Data JPA 一起使用组?【英文标题】:How to use a group by Sum SQL with Spring Data JPA? 【发布时间】:2015-02-14 03:12:02 【问题描述】:我想按数量加载畅销产品。这些是我的桌子:
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: Column not found: id
我认为这个错误与 id 列没有任何关系,因为这两个表都存在。 “按总和查询分组”是否适用于 Spring 数据?因为对我来说这似乎并不奇怪,因为 Spring Data 应该只从数据库中选择产品属性,并且使用这个 sql,我们还选择了 sum(po.quantity)。 Spring数据可以处理这个并将结果转换为List吗?
PS:我使用 HSQLDB 作为 DB 嵌入。
【问题讨论】:
返回名称和总和的查询如何神奇地返回 List将 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 和@JB Nizet。
【讨论】:
嗨,您是否在 Product bean 中创建了 total_quantity 列?我需要做类似的事情..你能详细说明你在 bean 级别中的内容吗? 他可以通过创建外部pojo类来使用数量 @TanvirChowdhury 我发现你至少必须映射 SUM 表达式中使用的列,在这种情况下,“数量”我也不会在这种情况下返回存储库对象。返回 List 我们可以使用标准来达到同样的效果吗以上是关于如何通过 Sum SQL 与 Spring Data JPA 一起使用组?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL 中将 CASE 表达式与 SUM 函数一起使用?
T-SQL-Sum over Partition by 与 group by 组合