【问题标题】:Hibernate Criteria query doesnt query the many in one to manyHibernate Criteria查询不查询一对多中的多
【发布时间】:2023-04-07 19:28:01
【问题描述】:

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

这是一个类:

@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"));

这个查询让我得到了我所有父母的名字和他们所有的孩子,但我只想要男孩,但它也给了我所有的女孩。有人看到我做错了吗?

【问题讨论】:

    标签: java mysql hibernate hibernate-criteria


    【解决方案1】:

    根据docs

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

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

    【讨论】:

    • FetchMode.EAGER 怎么样?
    • 大声笑我刚刚放弃并恢复到 HQL 工作正常
    猜你喜欢
    • 2013-07-16
    • 2010-09-20
    • 2010-10-17
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多