我有两个实体,即一对多关系中的用户和活动,其中用户有许多活动。我的目标是根据条件检索所有活动子集的用户。例如,我想检索所有用户以及" pending"中的相关活动。状态。用户可能没有任何待处理的活动。在这种情况下,我希望让用户没有活动。
我怎么能为此编写JPQL。
提前感谢您的帮助
答案 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或上述解决方案不起作用,那么您将不得不接受用户并在之后加载他们的活动(在单个查询中)或加载用户及其所有活动并过滤它们,正如萨尔兹在他/她的回答中所写的那样。