Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于一对多关系的Hibernate@Where子句_Java_Hibernate - Fatal编程技术网

Java 基于一对多关系的Hibernate@Where子句

Java 基于一对多关系的Hibernate@Where子句,java,hibernate,Java,Hibernate,我有家长课: @Entity public Class Parent { @OneToMany(fetch=FetchType.LAZY, mappedBy="parent") public List<Child> children; } 现在我想使用@Where子句让hibernate只加载所有子项都处于非活动状态的父项 我如何使用@Where或任何其他方法来实现这一点 更新: 我要检索的结果类似于以下SQL查询: SELECT p.* FROM Parent p

我有家长课:

@Entity
public Class Parent
{
    @OneToMany(fetch=FetchType.LAZY, mappedBy="parent")
    public List<Child> children;
}
现在我想使用@Where子句让hibernate只加载所有子项都处于非活动状态的父项

我如何使用@Where或任何其他方法来实现这一点

更新:

我要检索的结果类似于以下SQL查询:

SELECT p.*
FROM Parent p LEFT JOIN Child c ON c.parentid = p.id
WHERE c.isActive = 0
这应该做到:

    @Entity
    public Class Parent
    {
        @OneToMany(fetch=FetchType.LAZY, mappedBy="parent")
        @Where(clause = "isActive = false")
        public List<Child> children;
    }
@实体
公共类父类
{
@OneToMany(fetch=FetchType.LAZY,mappedBy=“parent”)
@其中(子句=“isActive=false”)
公开儿童名单;
}

新信息后的更新答案:

因此,想要做到这一点的方法是不可能的(至少从我的知识来看)。 我知道的唯一方法是使用自定义查询,如下所示:

    String query = "SELECT p FROM Parent p LEFT JOIN p.children Child WHERE children.isActive = 0";
    Query newquery = em.createQuery(query, Parent.class);
    List<Parent> parents = newquery.getResultList();
String query=“从父项p左键选择p.children子项,其中children.isActive=0”;
Query newquery=em.createQuery(Query,Parent.class);
List parents=newquery.getResultList();
em是一个整体管理者

!!我不确定p的孩子们。如果不起作用,请尝试使用p.child

这应该可以:

    @Entity
    public Class Parent
    {
        @OneToMany(fetch=FetchType.LAZY, mappedBy="parent")
        @Where(clause = "isActive = false")
        public List<Child> children;
    }
@实体
公共类父类
{
@OneToMany(fetch=FetchType.LAZY,mappedBy=“parent”)
@其中(子句=“isActive=false”)
公开儿童名单;
}

新信息后的更新答案:

因此,想要做到这一点的方法是不可能的(至少从我的知识来看)。 我知道的唯一方法是使用自定义查询,如下所示:

    String query = "SELECT p FROM Parent p LEFT JOIN p.children Child WHERE children.isActive = 0";
    Query newquery = em.createQuery(query, Parent.class);
    List<Parent> parents = newquery.getResultList();
String query=“从父项p左键选择p.children子项,其中children.isActive=0”;
Query newquery=em.createQuery(Query,Parent.class);
List parents=newquery.getResultList();
em是一个整体管理者


!!我不确定p的孩子们。如果不起作用,请尝试使用p.child

您可以使用以下注释来实现您的目标:

@OneToMany(fetch=FetchType.LAZY, mappedBy="parent")
@LazyCollection(LazyCollectionOption.TRUE)
public List<Child> children;
@OneToMany(fetch=FetchType.LAZY,mappedBy=“parent”)
@LazyCollection(LazyCollectionOption.TRUE)
公开儿童名单;

@OneToMany(fetch=FetchType.LAZY,mappedBy=“parent”)
@LazyCollection(LazyCollectionOption.EXTRA)
公开儿童名单;
但请注意第二个示例,如果您试图从childer列表中获取一些元数据,则可能会遇到问题:

该漏洞仍然存在于hibernate 5.0.1-final中


但是,如果您将使用
LazyCollectionOption.TRUE
并尝试获取儿童大小,您将获得所有儿童数据

您可以使用以下注释来实现您的目标:

@OneToMany(fetch=FetchType.LAZY, mappedBy="parent")
@LazyCollection(LazyCollectionOption.TRUE)
public List<Child> children;
@OneToMany(fetch=FetchType.LAZY,mappedBy=“parent”)
@LazyCollection(LazyCollectionOption.TRUE)
公开儿童名单;

@OneToMany(fetch=FetchType.LAZY,mappedBy=“parent”)
@LazyCollection(LazyCollectionOption.EXTRA)
公开儿童名单;
但请注意第二个示例,如果您试图从childer列表中获取一些元数据,则可能会遇到问题:

该漏洞仍然存在于hibernate 5.0.1-final中


但是,如果您将使用
LazyCollectionOption.TRUE
并尝试获得儿童尺寸,您将获得所有孩子的数据

这不是我需要的,因为我正在更新一个旧代码,其中我无法在任何地方执行此查询,但无论如何,谢谢。这不是我需要的,因为我正在更新一个旧代码,其中我无法在任何地方执行此查询,但无论如何,谢谢