【发布时间】:2026-01-22 03:40:01
【问题描述】:
我有两个实体:类别和产品。它们是关联的,并且类别是父类:
@Entity
@Table(name = "categories")
public class Category {
@Id
@GeneratedValue(generator = "inc")
@GenericGenerator(name = "inc", strategy = "increment")
private int id;
private String name;
private int totalQuantity;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "category")
private Set<Product> products;
public Category(int id, String name, int totalQuantity, Set<Product> products) {
this.id = id;
this.name = name;
this.totalQuantity = totalQuantity;
this.products = products;
}
产品实体:
@Entity
@Table(name = "products")
public class Product {
@Id
@GeneratedValue(generator = "inc")
@GenericGenerator(name = "inc", strategy = "increment")
private int id;
private String name;
private int amount;
@ManyToOne
@JoinColumn(name = "category_id")
private Category category
}
(totalQuantity 是与该类别关联的产品amount 的总和)
我想以防止 n + 1 并进行求和的方式获取所有类别和所有相关产品。这是我的查询错误/未完成,因为我不知道该怎么做/完成它:
@Query("SELECT new com.example.demo.category.Category(p.category.id, p.category.name, SUM(p.amount), ) FROM Product p GROUP BY p.category.id")
List<Category> findAll();
【问题讨论】:
标签: spring-boot jpa jpql