如何使用 Hibernate 获取不完整的集合?

How to get not full collection using Hibernate?

我学习Hibernate,现在有这样的结构:

Class 人:

@Entity
public class Person {

  ...

  @OneToMany(...)
  private List<Task> tasks;

  ...

}

Class 任务:

@Entity
public class Task {

  ...

  @Column(...)
  private boolean isCompleted;

  @ManyToOne(...)
  private Person person;

  ...

}

我的问题是: 我怎样才能得到只包含已完成任务的 Person 对象? 我使用 Hibernate Session 尝试了这个 HQL 查询:

SELECT person FROM Person person JOIN Task task WIH task.completed = true

但当然我只得到已完成任务的人,但每个列表也包含其他人。我听说过一些关于 Criteria 能力的事情,但它已被弃用。那么如何通过 HQL 或一些新的 API 来实现呢?我使用 Hibernate 5。感谢您的帮助。

试试这个

@OneToMany(...) @Where(clause = "is_completed = true")

请注意,您必须在 @Where 子句值中写入 sql,因为这将在本机 sql 生成期间应用。

来自文档-

  • Where clause to add to the element Entity or target entity of a collection
  • The clause is written in SQL