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

Mysql jpa查询中联接和计数的意外结果,mysql,join,eclipselink,jpql,Mysql,Join,Eclipselink,Jpql,我想检索特定用户在所有帖子中使用的标签数量。 e、 g.如果一个用户写了三篇文章,并且有两篇文章被标记为“someTag”,那么查询应该将标记“someTag”的计数写为2 用户和帖子之间存在一对多关系。 post和tag之间存在多对多关系 我正在为jpa使用eclipseLink 我为它编写了以下jpa查询 SELECT COUNT(tag.tagName) FROM Post post, Tag tag JOIN tag.posts posts WHERE post.user = :use

我想检索特定用户在所有帖子中使用的标签数量。 e、 g.如果一个用户写了三篇文章,并且有两篇文章被标记为“someTag”,那么查询应该将标记“someTag”的计数写为2

用户和帖子之间存在一对多关系。 post和tag之间存在多对多关系 我正在为jpa使用eclipseLink 我为它编写了以下jpa查询

SELECT COUNT(tag.tagName)  FROM Post post, Tag tag JOIN tag.posts posts WHERE post.user = :user AND tag.tagName = :tagName
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篇文章,标记为“friends”,我总共有17篇文章,我得到的结果是153篇,即它们的乘法

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

SELECT COUNT(tag.tagName)  FROM Post post, Tag tag JOIN tag.posts posts WHERE post.user = :user AND tag.tagName = :tagName
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查询中得到这样的结果。你能解释一下我做错了什么吗?

通过从post和tag中选择,你在做笛卡尔积。只需执行SQL查询中的操作,并使用联接:

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

嘿,谢谢你,这很管用:)你能给我推荐一些链接和书籍来学习jpa查询语言吗?我会再次感谢你的回答:)不太好。我学习了Hibernate手册和JPA规范。