从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 ..
答案 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)