父子模型的JPA查询

时间:2014-01-08 22:17:19

标签: hibernate jpa playframework hql

从3天开始,我正在寻找解决问题的方法。传统上我在mysql中有table及其detail table。它由JPA play framework 1.2.x完成。我需要实现一个具有过滤目的的查询。我有一个Event模型对象,每个Event都有功能。它们之间的关系如下。

@Entity(name="event")
public class Event extends Model{
public String name;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "event", cascade = CascadeType.ALL)
public List<Features> features;
}

@Entity(name ="features")
public class Features extends Model{
public String name;
@ManyToOne
public Event event;
}

所以,之后我需要根据feature id查询我的数据。例如,如果feature_id来自1,2和3.我的query应仅返回具有1,2和3 id的要素的events

我真的需要你的帮助stackoverflow ..

1 个答案:

答案 0 :(得分:1)

select e from Event e 
where 3 = (select count(f.id) from Feature f where f.id in (1, 2, 3) and f.event = e)

应该做的伎俩(它假设给定事件没有相同特征的多个实例)。

为了概括它,我们假设idSet是您的一组要素ID,因此查询将是

select e from Event e 
where :idCount = (select count(f.id) from Feature f where f.id in :ids and f.event = e)

您可以将idSet.size()绑定到idCount,将idSet绑定到ids

查询也可以写成如下,这也可以使它适用于ManyToMany关联:

select e from Event e 
where :idCount = (select count(f.id) from Event e2 
                  join e2.features f 
                  where f.id in :ids 
                  and e2 = e)