hibernate OneToMany标准返回重复项

时间:2011-06-08 10:20:26

标签: java hibernate

我有一个由以下内容映射的关联:

@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。

1 个答案:

答案 0 :(得分:12)

您需要添加distinct,例如

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

应该适合你的情况