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所有元素?listtags

4

1 回答 1

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

其中 ids 是标签的 id(您也可以使用对象), :size 是标签集合的大小。

如果您的标签有一个反向 mm 可以使用,

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
于 2013-08-28T14:21:39.100 回答