2013-08-28 82 views
3

我有一個實體Entry它有以下關係:如何以選擇所有的列表元素

@Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @ManyToMany(mappedBy = "entryList", cascade = {CascadeType.ALL}) 
    private List<Tag> tags = new LinkedList<>(); 

此SELECT語句選擇所有Entry其中的關係tags是從列表中至少一個元素list

SELECT m FROM Entry m JOIN m.tags tags WHERE tags IN :list; 

但我要的是一個SELECT語句選擇所有Entry其中全部list的元素必須與tags有關?

回答

1

我認爲你需要使用子查詢和計數,

Select e from Entry e where (Select count(t) from Tag t, Entry e2 join e2.tags t2 where t2 = t and e = e2 and t.id in (:ids)) = :size 

凡ID是標籤的ID(您可以使用對象以及),以及:大小大小的標籤集合。

如果標籤具有逆的M-M進入就可以使用,

Select e from Entry e where (Select count(t) from Tag t join t.entries e2 where e = e2 and t.id in (:ids)) = :size 
+0

謝謝。好主意使用子查詢和計數! – timmornYE

相關問題