加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – hibernate OneToMany标准返回重复项

发布时间:2020-12-15 00:39:41 所属栏目:Java 来源:网络整理
导读:我有一个由以下映射的关联: @Entitypublic class Parent{... @Id @Column(name = "parent_id") private Long id; @OneToMany(mappedBy = "parent") @OrderBy("id") private ListChild children;...}@Entitypublic class Child{... @Id @Column(name = "chil
我有一个由以下映射的关联:
@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.

解决方法

你需要添加一个不同的,例如
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

应该适合你的情况

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读