У меня есть ассоциация, сопоставленная следующим образом:
@Entity
public class Parent
{
...
@Id
@Column(name = "parent_id")
private Long id;
@OneToMany(mappedBy = "parent")
@OrderBy("id")
private List<Child> children;
...
}
@Entity
public class Child
{
...
@Id
@Column(name = "child_id")
private Long id;
@ManyToOne
@NotFound(action = NotFoundAction.IGNORE)
@JoinColumn(name = "parent_id")
private Parent parent;
@Column
private Boolean enabled;
...
}
Я хотел бы использовать Criteria API для возврата списка всех Parent
сущностей, которые содержат одну или несколько Child
сущностей с атрибутом enabled=false
. Я не хотел бы, чтобы сопоставленная коллекция children
была отфильтрована по запросу.
Например, с учетом следующего:
Parent A
- Child A enabled=true
- Child B enabled=false
Parent B
- Child A enabled=false
- Child B enabled=false
Parent C
- Child A enabled=true
- Child B enabled=true
Запрос должен вернуть следующее:
Parent A
- Child A enabled=true
- Child B enabled=false
Parent B
- Child A enabled=false
- Child B enabled=false
Пока я использую следующий запрос Criteria:
Criteria crit = session.createCriteria(Parent.class);
crit.createCriteria("children").add(Restrictions.eq("enabled", false));
List<Parent> result = crit.list();
return result;
Однако он возвращает эквивалент
Parent A
- Child A enabled=true
- Child B enabled=false
Parent B
- Child A enabled=false
- Child B enabled=false
Parent B
- Child A enabled=false
- Child B enabled=false
Т.е. он возвращает одну родительскую запись (с заполненной дочерней коллекцией) для каждого дочернего элемента с enabled=false
Кто-нибудь знает, как вернуть только уникальные родительские элементы в этом сценарии?
Советы приветствуются, стр.