当前位置:  开发笔记 > 编程语言 > 正文

基于一对多相对的Hibernate @Where子句

如何解决《基于一对多相对的Hibernate@Where子句》经验,为你挑选了1个好方法。

我有家长班:

@Entity
public Class Parent
{
    @OneToMany(fetch=FetchType.LAZY, mappedBy="parent")
    public List children;
}

和儿童班:

@Entity
public Class Child
{
    @ManyToOne(fetch=FetchType.Lazy)
    @JoinColumn(name="parent")
    public Parent parent;

    @Column(name="isActive")
    public boolean isActive;
}

现在我想使用@Where子句让休眠模式仅加载所有子项都处于非活动状态的父项。

如何使用@Where或任何其他方法来执行此操作?

更新:

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

SELECT p.*
FROM Parent p LEFT JOIN Child c ON c.parentid = p.id
WHERE c.isActive = 0

Mihai.. 5

应该这样做:

    @Entity
    public Class Parent
    {
        @OneToMany(fetch=FetchType.LAZY, mappedBy="parent")
        @Where(clause = "isActive = false")
        public List children;
    }


新信息后更新答案:

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

    String query = "SELECT p FROM Parent p LEFT JOIN p.children Child WHERE children.isActive = 0";
    Query newquery = em.createQuery(query, Parent.class);
    List parents = newquery.getResultList();

em是EntityManager。

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



1> Mihai..:

应该这样做:

    @Entity
    public Class Parent
    {
        @OneToMany(fetch=FetchType.LAZY, mappedBy="parent")
        @Where(clause = "isActive = false")
        public List children;
    }


新信息后更新答案:

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

    String query = "SELECT p FROM Parent p LEFT JOIN p.children Child WHERE children.isActive = 0";
    Query newquery = em.createQuery(query, Parent.class);
    List parents = newquery.getResultList();

em是EntityManager。

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

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有