首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用SPRING数据进行get 2选择1查询

如何使用SPRING数据进行get 2选择1查询
EN

Stack Overflow用户
提问于 2020-09-23 17:07:29
回答 1查看 33关注 0票数 0

我有3个实体:

代码语言:javascript
运行
复制
@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<>();

我想根据一本书的格式和图书馆来恢复它的副本数量。但是,我不知道如何根据格式和它的库来检索副本列表和总数。我该怎么做。我写了这个请求,但是我不能得到我想要的。

我的要求是:

代码语言:javascript
运行
复制
    @Query("SELECT DISTINCT  c, COUNT(c.format) FROM Copy c WHERE c.book.id = :id")
    List<Copy> getCopyById(@Param("id") Long id);
EN

回答 1

Stack Overflow用户

发布于 2020-09-23 18:30:17

首先,您需要为handel查询结果创建类(copy,total)

代码语言:javascript
运行
复制
public class CopyWithTotal{
    Copy c;
    int total;
    CopyWithTotal(Copy c, int total){
        this.c = c;
        this.total = total;
    }
}

然后您应该在查询中构造这个类

代码语言:javascript
运行
复制
@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中的所有列都应该出现

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64024572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档