Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate:关联上的HQL联接查询结果不符合预期_Hibernate_Associations_Hql_Inner Join - Fatal编程技术网

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