Hibernate:关联上的HQL联接查询结果不符合预期
我有两门课Hibernate:关联上的HQL联接查询结果不符合预期,hibernate,associations,hql,inner-join,Hibernate,Associations,Hql,Inner Join,我有两门课 用户和文章 用户与文章有一对多关系 我想通过用户的用户名和文章的id 如果id与用户编写的文章不匹配,则我只获得了与预期相同的结果,其中article.user.username='sammer' 而我添加了另一个限制,如article.id=8。它再次显示了所有结果。它应该提供唯一的结果,或者根本没有结果 假设用户写了id为8,9,10的文章。当我点击上面的查询时,它给出了所有3个结果。但是如果我把id改成8,9,10以外的任何东西。它没有显示任何结果。但当id为8、9或10中的任
用户
和文章
用户
与文章有一对多
关系
我想通过用户的用户名
和文章的id
如果id与用户编写的文章不匹配,则我只获得了与预期相同的结果,其中article.user.username='sammer'
而我添加了另一个限制,如article.id=8
。它再次显示了所有结果。它应该提供唯一的结果,或者根本没有结果
假设用户写了id为8,9,10的文章。当我点击上面的查询时,它给出了所有3个结果。但是如果我把id改成8,9,10以外的任何东西。它没有显示任何结果。但当id为8、9或10中的任何一个时,它会显示所有结果
请给出你的建议。我可能做错了什么。
谢谢你抽出时间 选择符合筛选条件的文章:
select a
from Article a
where a.user.username = 'sammer' and a.id = 8
我想通过用户的用户名和文章的id获得一篇文章
就像@DraganBozanovic所说的,你只需要查询一篇文章
,而不是像你那样通过用户
的文章集合选择不同的User.articles…
假设用户编写了id为8,9,10的文章。当我撞到楼梯时
在上面的查询中,它给出了所有3个结果。但是如果我把身份证改成
除了8,9,10以外的任何东西。它没有显示任何结果。但它表明
id为8、9或10中任何一个时的所有结果
当条件article.user.username='sammer'和article.id=8
匹配时,您已找到链接到某个用户的特定文章,但随后您请求用户的文章选择不同的用户。文章
,而不是获取您刚刚找到的文章。这就是为什么你最终得到了所有用户的文章8,9,10
如果您想获得第8条,请执行以下操作:
select distinct article
from User as user inner join user.articles as article
where article.user.username = 'sammer' and article.id = 8
当article.id 8不存在或其链接用户有其他名称时,将返回文章或无/异常。您正在查询用户的文章集合。因此,如果满足条件或不满足条件,您将获得所有集合。回顾一下你想要实现什么,也许你写错了什么,但我不明白。我是从用户文章中查询数据,还是直接从文章中查询数据。我的意思是只要条件与数据匹配,查询就应该工作。为什么它会返回所有数据?嗯。。我最好给你写个答案,让你更清楚。。。看一看。但是我在select子句中使用了user.articles。您使用了article,它是user.articles的别名。它们不都代表相同的对象吗?只是想一想不,它代表的不一样。别名为“article”时,指的是在某个用户中具有关联的所有文章。但是“user.articles”指的是特定用户的所有文章。对于@Dragan的答案,请不要忘记添加disctinct关键字,因为如果有具有相同id属性值的文章,它将不会像您希望的那样工作。
select distinct article
from User as user inner join user.articles as article
where article.user.username = 'sammer' and article.id = 8