有人可以解释一下,为什么这个查询在 JPA 中有效:
SELECT e FROM Entry e JOIN e.tags tags WHERE tags IN :tags
e.tags 是
@ManyToMany(mappedBy = "entryList" )
private List<Tag> tags = new LinkedList<>();
因此,我可以将标签中的实体与参数中的实体进行比较。但以下不起作用:
SELECT e FROM Entry e WHERE (SELECT COUNT(t) FROM Tag t JOIN t.entryList e2 WHERE e2 = e AND t IN :tags) = :size
没有错误,但没有找到结果。如果我将标签 ID 列表提供给参数 :tags 并执行以下查询,则它可以正常工作:
SELECT e FROM Entry e WHERE (SELECT COUNT(t) FROM Tag t JOIN t.entryList e2 WHERE e2 = e AND t.id IN :tagIds) = :size
我花了几个小时才找到这个简单的错误原因,并且有兴趣知道什么时候可以比较实体,什么时候不可以?