JPQL左连接,对一对多集合进行过滤

时间:2015-03-20 04:50:14

标签: java-ee jpa entity hql jpql

我有两个实体,即一对多关系中的用户和活动,其中用户有许多活动。我的目标是根据条件检索所有活动子集的用户。例如,我想检索所有用户以及" pending"中的相关活动。状态。用户可能没有任何待处理的活动。在这种情况下,我希望让用户没有活动。

我怎么能为此编写JPQL。

提前感谢您的帮助

2 个答案:

答案 0 :(得分:0)

你可以像在你的实体中那样设置关联:

//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
    }

希望有所帮助!

答案 1 :(得分:0)

在JPA 2.1中引入了JOIN ON,但我不确定它是否可以与FETCH结合使用。 基本上我建议尝试以下查询:

SELECT u from User u LEFT JOIN FETCH u.activity a ON a.state = 'Pending'

如果您没有JPA 2.1或上述解决方案不起作用,那么您将不得不接受用户并在之后加载他们的活动(在单个查询中)或加载用户及其所有活动并过滤它们,正如萨尔兹在他/她的回答中所写的那样。