1
votes

I study Hibernate and now have such structure:

Class Person:

@Entity
public class Person {

  ...

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

  ...

}

Class Task:

@Entity
public class Task {

  ...

  @Column(...)
  private boolean isCompleted;

  @ManyToOne(...)
  private Person person;

  ...

}

My question is: How can I get Person object with only tasks which are completed? I tried this HQL query using Hibernate Session:

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

but of course I get just persons that have completed tasks but every list cotains the rest of them also. I've heard something about Criteria abilities but it's deprecated. So how can I do it via HQL or some new API? I use Hibernate 5. Thanks for any help.

1
Try to select tasks that are completed with their persons and not persons with completed tasks. It is better to use the Many side of the association.Bilal BBB

1 Answers

0
votes

Try this

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

Please note that you have to write sql in the @Where clause value, since this will be applied during native sql generation.

From documentation-

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