我有一个实体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
有关?
答案 0 :(得分: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(您也可以使用这些对象),并且:size是标签集合的大小。
如果您的标签有一个反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