我有3个实体:
@Entity
@Table(name = "copy")
public class Copy {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private Long id;
@Column(name = "format")
private String format;
@Column(name = "status")
private String status;
@ManyToOne
@JoinColumn(name = "book_id")
private Book book;
@ManyToOne
@JoinColumn(name = "library_id")
private Library library;
@Entity
@Table(name = "book")
public class Book implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private Long id;
@Column(name = "title")
private String title;
@Column(name = "pub_date")
private Date pubDate;
@Column(name = "page")
private int page;
@Column(name = "synopsis")
private String synopsis;
//TODO Image à gérer
@Column(name = "cover")
private String cover;
@ManyToOne
@JoinColumn(name = "categorie_id")
private Categorie categorie;
@ManyToOne
@JoinColumn(name = "author_id")
private Author author;
@OneToMany(mappedBy = "book")
List<Copy> copyList = new ArrayList<>();
@Entity
@Table(name = "library")
public class Library implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private Long id;
@Column(name = "nom")
private String nom;
@Column(name = "adress")
private String adress;
@Column(name = "phone_num")
private String phoneNum;
@Column(name = "email")
private String email;
@OneToMany(mappedBy = "library")
private List<Copy> copyList = new ArrayList<>();
我想根据一本书的格式和图书馆来恢复它的副本数量。但是,我不知道如何根据格式和它的库来检索副本列表和总数。我该怎么做。我写了这个请求,但是我不能得到我想要的。
我的要求是:
@Query("SELECT DISTINCT c, COUNT(c.format) FROM Copy c WHERE c.book.id = :id")
List<Copy> getCopyById(@Param("id") Long id);
发布于 2020-09-23 18:30:17
首先,您需要为handel查询结果创建类(copy,total)
public class CopyWithTotal{
Copy c;
int total;
CopyWithTotal(Copy c, int total){
this.c = c;
this.total = total;
}
}
然后您应该在查询中构造这个类
@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);
每当您使用聚合函数(如count all selected column )时,group by中的所有列都应该出现
https://stackoverflow.com/questions/64024572
复制相似问题