我有一个由以下映射的关联:
- @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返回包含一个或多个具有属性enabled = false的子实体的所有Parent实体的列表.我不希望查询过滤映射的子集合.
例如,给出以下内容:
- 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
有谁知道如何在这种情况下只返回唯一的父元素?
建议表示赞赏,p.