Java 如何使用SPRING数据在1个查询中获取2个选择

Java 如何使用SPRING数据在1个查询中获取2个选择,java,spring,spring-boot,thymeleaf,jpql,Java,Spring,Spring Boot,Thymeleaf,Jpql,我有3个实体: @实体 @表(name=“copy”) 公共类副本{ @身份证 @GeneratedValue(策略=GenerationType.IDENTITY) @纵队 私人长id; @列(name=“format”) 私有字符串格式; @列(name=“status”) 私有字符串状态; @许多酮 @JoinColumn(name=“book\u id”) 私人书籍; @许多酮 @JoinColumn(name=“library\u id”) 私人图书馆; @实体 @表(name=“bo

我有3个实体:

@实体
@表(name=“copy”)
公共类副本{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@纵队
私人长id;
@列(name=“format”)
私有字符串格式;
@列(name=“status”)
私有字符串状态;
@许多酮
@JoinColumn(name=“book\u id”)
私人书籍;
@许多酮
@JoinColumn(name=“library\u id”)
私人图书馆;
@实体
@表(name=“book”)
公共类图书实现了可序列化{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@纵队
私人长id;
@列(name=“title”)
私有字符串标题;
@列(name=“发布日期”)
公开日期;
@列(name=“page”)
私人网页;
@列(名称=“概要”)
私有字符串概要;
//待办事项图像
@列(name=“cover”)
私用线套;
@许多酮
@JoinColumn(name=“categorie\u id”)
私有范畴;
@许多酮
@JoinColumn(name=“author\u id”)
私人作者;
@OneToMany(mappedBy=“book”)
List copyList=new ArrayList();
@实体
@表(name=“library”)
公共类库实现了可序列化{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@纵队
私人长id;
@列(name=“nom”)
私有字符串名称;
@列(name=“address”)
私有字符串地址;
@列(name=“phone\u num”)
私有字符串phoneNum;
@列(name=“email”)
私人字符串电子邮件;
@OneToMany(mappedBy=“library”)
私有列表copyList=new ArrayList();
我想根据一本书的格式和图书馆来恢复它的份数。但是我不知道如何根据格式和图书馆来检索副本列表和总份数。我该怎么做。我写了这个请求,但我无法得到我想要的

我的请求:

@Query(“从副本c中选择不同的c,COUNT(c.format),其中c.book.id=:id”)
列出getCopyById(@Param(“id”)长id);

首先,您需要创建类来处理查询结果(副本,总计)

那么您应该在查询中创建这个类

@Query("SELECT new packgeTo.CopyWithTotal(DISTINCT  c, COUNT(c.format)) FROM Copy c WHERE c.book.id = :id group by c")
List<CopyWithTotal> getCopyById(@Param("id") Long id);
@Query(“从副本c中选择新的packgeTo.CopyWithTotal(不同的c,COUNT(c.format)),其中c.book.id=:id按c分组”)
列出getCopyById(@Param(“id”)长id);

无论何时使用聚合函数(如count all selected column)都应显示在group by中,这就是group by的作用。
@Query("SELECT new packgeTo.CopyWithTotal(DISTINCT  c, COUNT(c.format)) FROM Copy c WHERE c.book.id = :id group by c")
List<CopyWithTotal> getCopyById(@Param("id") Long id);