首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL到JPQL,如何查询嵌套JPQL

SQL到JPQL,如何查询嵌套JPQL
EN

Stack Overflow用户
提问于 2018-10-15 07:02:47
回答 1查看 251关注 0票数 0

我想知道JPQL是否可以嵌套查询。我正在学习Spring,我还上传了几个相关的问题。

如果我在MySQL中有下面的sql,如何生成JPQL:

代码语言:javascript
运行
复制
select
    c.*
from
    cheat c
    left join (select * from cheat_vote where val = 1) v on c.cheat_seq = v.cheat_fk
group by
    c.cheat_seq
having
    count(*) < 10
limit 5

我有两个实体。

代码语言:javascript
运行
复制
public class Cheat implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "cheat_seq", length = 10)
    private Long cheatSeq;

    @Column(name = "question", unique = true, nullable = false)
    private String question;

    @Column(name = "answer", unique = true, nullable = false)
    private String answer;

    @Column(name = "writer_ip", nullable = false)
    private String writerIP;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "reg_date", nullable = false)
    private Date regDate;

    @Transient
    private String regDateText;

    @OneToMany(mappedBy = "cheat", fetch=FetchType.LAZY)
    private Set<CheatVote> vote;

    @Override
    public String toString() {
        return "Cheat [cheatSeq=" + cheatSeq + "]";
    }


}

上面的实体有一个@OneToMany集合,集合实体在下面。

代码语言:javascript
运行
复制
public class CheatVote implements Serializable{

    private static final long serialVersionUID = 1L;

    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Id
    @Column(name="seq", nullable=false)
    private Long seq;

    @Column(name="val", nullable=false)
    @NonNull
    private Integer value;

    @Column(name="ip_address", nullable=false)
    @NonNull
    private String ipAddress;

    @JoinColumn(name="cheat_fk", referencedColumnName="cheat_seq")
    @ManyToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
    @NonNull
    private Cheat cheat;

    @Override
    public String toString() {
        return "CheatVote [seq=" + seq + "]";
    }


}

我想得到欺骗实体,它有不到10个子CheatVote实体。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-15 08:36:27

你可以试试:

代码语言:javascript
运行
复制
@Query("SELECT c FROM Cheat c LEFT JOIN c.vote v WHERE v.value = 1 GROUP BY c.cheatSeq HAVING count(c) < 10")

关于“限制”,您可以使用Spring的参数Pageable

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

https://stackoverflow.com/questions/52811326

复制
相关文章

相似问题

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