Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Jakarta ee JPQL左连接,在一对多集合上进行过滤_Jakarta Ee_Jpa_Entity_Hql_Jpql - Fatal编程技术网

Jakarta ee JPQL左连接,在一对多集合上进行过滤

Jakarta 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

我有两个实体,一对多关系中的用户和活动,其中用户有许多活动。我的目标是根据条件检索具有活动子集的所有用户。例如,我想检索所有处于“挂起”状态的用户和相关活动。用户可能没有任何挂起的活动。在这种情况下,我希望用户没有任何活动

如何为此编写JPQL


提前感谢您的帮助

您可以像在您的实体中一样执行此集合关联:

//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'**。但这不符合我的要求,请用一些数据库信息更新你的问题