我正在尝试创建一对多查询。连接似乎正在工作,因为集合被填充但当我向集合添加查询时它似乎没有做任何事情
这是一个课程:
@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"));
这个问题让我所有的父母都得到了我的名字和他们所有的孩子,但我只想要男孩子,但它也给了我所有的女孩。有谁看到我做错了什么?
答案 0 :(得分:0)
根据docs,
Join fetching: Hibernate retrieves the associated instance or collection
in the same SELECT, using an OUTER JOIN.
在外连接中,无论连接条件如何,您都将获得两个表中的所有记录,因此将获取策略更改为SELECT
,它应仅获取与限制匹配的结果。如果您还没有这样做,我建议您启用批量提取。