我正在尝试创建一对多查询。连接似乎有效,因为该集合已填充,但是当我向该集合添加查询时,它似乎没有做任何事情
这是一个类:
@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"));
这个查询让我正确地知道了我所有 parent 的名字和他们所有的 child ,但我只想要男孩,但它也给了我所有的女孩。有人看到我做错了什么吗?
最佳答案
根据 docs ,
Join fetching: Hibernate retrieves the associated instance or collection
in the same SELECT, using an OUTER JOIN.
在外连接中,无论连接条件如何,您都将获得两个表中的所有记录,因此将您的抓取策略更改为 SELECT
,它应该只抓取符合限制条件的结果。如果您还没有这样做,我还建议您启用批量提取。
关于java - Hibernate Criteria 查询不查询一对多中的多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31659397/