【发布时间】:2019-03-19 13:29:30
【问题描述】:
我想知道 JPQL 是否可以嵌套查询。我在学习Spring Data JPA,也上传了几个相关的问题。
如果我在 MySQL 中有以下 sql,我如何生成 JPQL:
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
我有两个实体。
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 + "]";
}
}
Above 实体有一个@OneToMany 集合,集合实体在下面。
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 实体的 Cheat 实体。
【问题讨论】:
-
你有没有尝试过?
-
其实我不能......只是用谷歌搜索它。 “SELECT c FROM Cheat c JOIN (SELECT v FROM CheatVote v WHERE v.cheat = c ...)”没有意义!因为 SELECT c FROM Cheat c join c.something 是对的