jpa查询中的连接和计数的意外结果

时间:2013-05-02 13:56:38

标签: mysql join eclipselink jpql

我想检索特定用户的所有帖子中使用的标签数量。 例如如果一个用户写了三个帖子,而且两个帖子都标有'someTag',那么查询应该将计数写为2,用于标记'someTag'

用户和帖子之间存在一对多的关系。 帖子和标签之间有很多关系 我正在使用eclipseLink for jpa 我为它写了这个jpa查询如下

SELECT COUNT(tag.tagName)  FROM Post post, Tag tag JOIN tag.posts posts WHERE post.user = :user AND tag.tagName = :tagName

但是这给了我标签和所有帖子的倍增 我已经标记了9个帖子,标签为'朋友,我总共有17个帖子,我得到的结果是153,即他们的乘法。

我尝试了一个简单的mysql查询,如下所示

SELECT COUNT(*)
FROM Tag t
JOIN post_tag pt ON pt.idTag = t.idtag
JOIN Post p ON pt.idpost = p.idpost
JOIN User u ON p.iduser = u.iduser
WHERE u.username = 'prasadkharkar'
AND t.tagName = 'friends'

这很好,并给我结果为9。

我想在我的jpa查询中得到这样的结果。你能解释一下我在做什么错事吗?

1 个答案:

答案 0 :(得分:1)

通过从帖子和标签中选择,您正在制作笛卡尔积。就像在SQL查询中一样,并使用连接:

select count(tag.tagName) 
from Tag tag
join tag.posts post 
where post.user = :user 
and tag.tagName = :tagName