休眠OneToMany标准返回重复项

我有一个关联映射如下:

@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

有谁知道如何在这种情况下只返回唯一的父元素?

建议感激,p。


你需要添加一个distinct ,例如

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

应该在你的情况下工作

链接地址: http://www.djcxy.com/p/6313.html

上一篇: hibernate OneToMany criteria returns duplicates

下一篇: Create the perfect JPA entity