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
并尝试获得儿童尺寸,您将获得所有孩子的数据这不是我需要的,因为我正在更新一个旧代码,其中我无法在任何地方执行此查询,但无论如何,谢谢。这不是我需要的,因为我正在更新一个旧代码,其中我无法在任何地方执行此查询,但无论如何,谢谢