Hibernate Criteria查询不会在一对多中查询多个

时间:2015-07-27 17:22:03

标签: java mysql hibernate hibernate-criteria

我正在尝试创建一对多查询。连接似乎正在工作,因为集合被填充但当我向集合添加查询时它似乎没有做任何事情

这是一个课程:

@OneToMany(fetch=FetchType.LAZY, mappedBy="parent")
    public Set<Child> getChildren() {
        return this.children;
    }

这是另一个

@ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="PARENT_ID")
    public Parent getParent() {
        return this.parent;
    }

这是不可行的查询

Criteria criteria = session.createCriteria(Parent.class,"p")
               .setFetchMode("p.children", FetchMode.JOIN)
                .createAlias("p.children", "c")
               .add(Restrictions.like("p.name", "%" + nameQuery + "%").ignoreCase())
               .add(Restrictions.eq("c.gender", "boy"));

这个问题让我所有的父母都得到了我的名字和他们所有的孩子,但我只想要男孩子,但它也给了我所有的女孩。有谁看到我做错了什么?

1 个答案:

答案 0 :(得分:0)

根据docs

    Join fetching: Hibernate retrieves the associated instance or collection 
in the same SELECT, using an OUTER JOIN.

在外连接中,无论连接条件如何,您都将获得两个表中的所有记录,因此将获取策略更改为SELECT,它应仅获取与限制匹配的结果。如果您还没有这样做,我建议您启用批量提取。