我有家长班:
@Entity public Class Parent { @OneToMany(fetch=FetchType.LAZY, mappedBy="parent") public Listchildren; }
和儿童班:
@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 Listchildren; }
因此,要做到这一点的方法是不可能的(至少据我所知)。我知道的唯一方法是使用自定义查询,如下所示:
String query = "SELECT p FROM Parent p LEFT JOIN p.children Child WHERE children.isActive = 0"; Query newquery = em.createQuery(query, Parent.class); Listparents = newquery.getResultList();
em是EntityManager。
!! 我不确定孩子们。如果不起作用,请尝试使用p.child
应该这样做:
@Entity public Class Parent { @OneToMany(fetch=FetchType.LAZY, mappedBy="parent") @Where(clause = "isActive = false") public Listchildren; }
因此,要做到这一点的方法是不可能的(至少据我所知)。我知道的唯一方法是使用自定义查询,如下所示:
String query = "SELECT p FROM Parent p LEFT JOIN p.children Child WHERE children.isActive = 0"; Query newquery = em.createQuery(query, Parent.class); Listparents = newquery.getResultList();
em是EntityManager。
!! 我不确定孩子们。如果不起作用,请尝试使用p.child