我有一个由以下内容映射的关联:
@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
的{{1}}个实体的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
到目前为止,我使用以下Criteria查询:
Parent A
- Child A enabled=true
- Child B enabled=false
Parent B
- Child A enabled=false
- Child B enabled=false
然而它返回相当于
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
的子元素返回单个父记录(已填充子集合)
有没有人知道如何在这种情况下只返回唯一的父元素?
建议表示赞赏,p。
答案 0 :(得分:12)
您需要添加distinct
,例如
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
应该适合你的情况