2014-01-08 95 views
0

由於3天我正在尋找解決我的問題。傳統上,我在mysql中有一個table及其detail table。它完成與JPA play framework 1.2.x。我需要實現具有過濾目的的查詢。我有一個事件模型對象,每個事件都有特徵。它們之間的關係如下。父母和孩子的JPA查詢模型

@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應該只返回events其功能有1,2和3 id。

我真的需要你的幫助計算器..

回答

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,並idSetids

查詢也可以寫成以下,這也將使其成爲一個多對多的關聯工作:

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) 
+0

謝謝您的回答。它真的有效。但是我不能在JPA hibernate查詢中實現IN子句。你知道怎麼做嗎? – Emilla

+0

如果兩個事件可以具有相同的功能,那麼您的映射是錯誤的:它應該是ManyToMany,而不是OneToMany。查詢可以很容易地適應這個。 –

+0

是的。你是對的。我更新了我的評論:) – Emilla