【问题标题】:unexpected results of join and count in jpa queryjpa查询中join和count的意外结果
【发布时间】:2013-04-26 17:43:29
【问题描述】:

我想检索特定用户的所有帖子中使用的标签计数。 例如如果一个用户写了 3 个帖子,并且有两个帖子被标记为“someTag”,那么查询应该将标记“someTag”的计数写为 2

用户和帖子之间存在一对多的关系。 帖子和标签之间存在多对多关系 我正在为 jpa 使用 eclipseLink 我为它写了这个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 查询中得到这样的结果。你能解释一下我做错了什么吗?

【问题讨论】:

    标签: mysql join eclipselink jpql


    【解决方案1】:

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

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

    【讨论】:

    • 嘿,谢谢伙计,那行得通:) 你能给我推荐一些链接和书籍来很好地学习 jpa 查询语言吗?那将不胜感激再次感谢您的回答:)
    • 并非如此。我学习了 Hibernate 手册和 JPA 规范。
    猜你喜欢
    • 1970-01-01
    • 2016-09-10
    • 2016-08-29
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 2010-09-19
    • 2023-03-05
    • 2010-11-25
    相关资源
    最近更新 更多