jpql - 在一个到多个集合中选择一些元素

And*_*dna 2 jpa jpql

在我们的域模型中,我们有

@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)

我想写一个查询来获取所有QuestionSetquestions集合中至少有一个与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列表中的实例数量?

JB *_*zet 7

不会.JPA不会返回与数据库的实际情况不符的实体.如果QuestionSet在数据库中有4个问题,则QuestionSet实体将有4个问题.

如果您只想要一些问题,请选择您感兴趣的问题,然后导航到他们的问题集.

或者执行以下查询,该查询将返回匹配的问题集以及匹配的问题:

 SELECT s, q FROM QuestionSet s JOIN s.questions q WHERE ...
Run Code Online (Sandbox Code Playgroud)