gpt4 book ai didi

java - Hibernate Criteria 查询不查询一对多中的多

转载 作者:行者123 更新时间:2023-11-30 22:38:48 25 4
gpt4 key购买 nike

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

这是一个类:

@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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com