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

标签 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"));

这个查询让我正确地知道了我所有 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/

相关文章:

java - 正在将 Java 项目导出为可运行的 Jar : not doing anything

c# - Java 和 .NET 流通过 IKVM 的互操作性

mysql - 如何选择列名中有点的列

hibernate - 如何在每次选择之前阻止 JPA 实体管理器刷新

java - org.springframework.beans.NotReadablePropertyException :

java - 从 Jshell 运行 echo 示例

java - 在Java中获得与Netcat相同的输出

php - 使数据不可编辑,但在 php mysql 中单击按钮时保持可读

PHP 代码不运行并且不提供任何错误

oracle - org.hibernate.Query .iterate() VS .getResultList() 查询生成