在我们的领域模型中,
@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;
我想编写一个查询,以获取在
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)
date是joda-time库中的
DateTime
类型,我将其设置为:query.setParameter("tomorrow", DateTime.now().plusDays(1))
现在这部分起作用,我只得到那些正确匹配的
QuestionSets
,但是我也得到了所有问题,即使例如IN
仅匹配了其中一个。我的期望过高还是有某种方法可以限制
questions
列表中的实例数量? 最佳答案
不会。JPA不会向您返回与数据库实际情况不符的实体。如果一个QuestionSet在数据库中有4个问题,那么QuestionSet实体将有4个问题。
如果您只想回答一些问题,请选择您感兴趣的问题,然后导航至其问题集。
或执行以下查询,这将返回匹配的问题集和匹配的问题:
SELECT s, q FROM QuestionSet s JOIN s.questions q WHERE ...
关于jpa - jpql-在一对多集合中选择一些元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16886279/