我有一个由以下映射的关联:
@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 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。
您需要添加一个distinct
, e.g.
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
应该适合你的情况
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)