jpa - jpql - 在一对多集合中选择一些元素

标签 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;

我想编写一个查询来获取所有 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,但我也得到了所有的问题,即使,例如只有其中一个被 匹配>在

是我的期望太高还是有什么方法可以限制问题列表中的实例数量?

最佳答案

没有。 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/

相关文章:

java - 使用 JPA 和 ObjectDB 按 id 选择多个对象?

postgresql - JPQL EclipseLink 分页

java - 当我尝试进行 JPQL JOIN 查询时发生 StackOverflowError

java - JPA native 查询获取单个对象

java - 如果相关实体存在,则防止删除实体

java - JPA 实体的 JAXB 工厂

database - hibernate : Foreign key has the wrong number of column. 应该是 0

java - 如何编写此 JPQL 查询?

java - 是否可以使用 findTopN 样式方法名称来通过 Spring Data/JPA 的变量号进行限制?

mysql - 使用 eclipselink 持久化和合并实体后无法获取 ID