Jakarta ee JPQL左连接,在一对多集合上进行过滤
我有两个实体,一对多关系中的用户和活动,其中用户有许多活动。我的目标是根据条件检索具有活动子集的所有用户。例如,我想检索所有处于“挂起”状态的用户和相关活动。用户可能没有任何挂起的活动。在这种情况下,我希望用户没有任何活动 如何为此编写JPQLJakarta ee JPQL左连接,在一对多集合上进行过滤,jakarta-ee,jpa,entity,hql,jpql,Jakarta Ee,Jpa,Entity,Hql,Jpql,我有两个实体,一对多关系中的用户和活动,其中用户有许多活动。我的目标是根据条件检索具有活动子集的所有用户。例如,我想检索所有处于“挂起”状态的用户和相关活动。用户可能没有任何挂起的活动。在这种情况下,我希望用户没有任何活动 如何为此编写JPQL 提前感谢您的帮助您可以像在您的实体中一样执行此集合关联: //bi-directional many-to-one association to Activities @ManyToOne(fetch=FetchType.LAZY) @J
提前感谢您的帮助您可以像在您的实体中一样执行此集合关联:
//bi-directional many-to-one association to Activities
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="Activity_Id")
private Activity Activity;
public Activity getActivity(){
this.Activity
}
而当您的查询:
List<User> toReturn= new ArrayList<>();
Query query = em.createQuery("select u from User u ");
List<User> list = query.getResultList();
for(User u : list){
if(u.getActivity().getStatus().equal("PENDING")){
toReturn.add(u);
//Some of your business Logic
}
//Some of your business Logic
}
List-toReturn=new-ArrayList();
Query Query=em.createQuery(“从用户u中选择u”);
List=query.getResultList();
用于(用户u:列表){
如果(u.getActivity().getStatus().equal(“待定”)){
加入(u);
//您的一些业务逻辑
}
//您的一些业务逻辑
}
希望有帮助 在JPA2.1中,引入了
连接
,但我不确定它是否可以与获取
结合使用。
基本上,我建议尝试以下查询:
SELECT u from User u LEFT JOIN FETCH u.activity a ON a.state = 'Pending'
如果您没有JPA 2.1,或者上述解决方案不起作用,那么您必须让用户随后加载他们的活动(在单个查询中),或者像Sarz在其回答中所写的那样,将用户的所有活动加载并过滤他们。Fine,了解到目前为止您尝试的内容吗?**从用户u left join u.activity a中选择u,其中a.state='Pending'**。但这不符合我的要求,请用一些数据库信息更新你的问题