在我们的域模型中,我们有
@Entity
@SequenceGenerator(name = "wordlist_seq", sequenceName = "wordlist_seq")
public class QuestionSet {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "wordlist_seq")
private Long id;
@OneToMany(cascade = CascadeType.ALL)
private List<Question> questions;
Run Code Online (Sandbox Code Playgroud)
我想写一个查询来获取所有QuestionSet在questions集合中至少有一个与IN谓词匹配的问题的实例,我也希望在questions集合中只有那些匹配的问题.
这是我写的查询:
SELECT s FROM QuestionSet s JOIN s.questions q WHERE q IN (SELECT ar.question FROM AppointedRepetition ar WHERE ar.date < :tomorrow)
Run Code Online (Sandbox Code Playgroud)
date是DateTimejoda-time库中的类型,我设置如下:
query.setParameter("tomorrow", DateTime.now().plusDays(1))
Run Code Online (Sandbox Code Playgroud)
现在这部分工作,我只是得到QuestionSets了匹配正确的,但我也得到了所有的问题,即使,例如,只有其中一个匹配IN.
我的期望是否太高,或者是否有某种方法可以限制questions列表中的实例数量?
不会.JPA不会返回与数据库的实际情况不符的实体.如果QuestionSet在数据库中有4个问题,则QuestionSet实体将有4个问题.
如果您只想要一些问题,请选择您感兴趣的问题,然后导航到他们的问题集.
或者执行以下查询,该查询将返回匹配的问题集以及匹配的问题:
SELECT s, q FROM QuestionSet s JOIN s.questions q WHERE ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7590 次 |
| 最近记录: |