Hibernate:关联上的HQL连接查询不会按预期结果

时间:2015-07-11 19:12:16

标签: hibernate associations hql inner-join

我有两节课 Userarticle

User与文章

one-to-many的关系
  

我希望得到用户username和文章id

的文章
select distinct user.articles
     from User as user inner join user.articles as article
     where article.user.username = 'sammer' and article.id = 8

如果ID与用户撰写的文章不匹配,我会得到与预期相同的结果where article.user.username = 'sammer'或没有结果  而我将另一个限制添加为article.id =8。它再次显示了所有结果。它应该提供一个独特的结果或根本没有结果。

  

例如:假设用户已经写了id为#8,9,10的文章。当我点击上面的查询时,它会给出所有3个结果。但是,如果我将id更改为除了8,9,10以外的任何内容。它没有显示任何结果。但它显示了当id是8,9或10

中的任何一个时的所有结果

请给出你的建议。我可能做错了什么。 谢谢你的时间!

2 个答案:

答案 0 :(得分:1)

选择符合过滤条件的文章:

select a
from Article a
where a.user.username = 'sammer' and a.id = 8

答案 1 :(得分:0)

  

我希望根据用户的用户名和文章ID获取文章

就像@DraganBozanovic所说的那样,你只需要查询Article,而不是像User那样查询select distinct user.articles ...的文章集article.user.username = 'sammer' and article.id = 8

  

假设用户已经写了id为#8,9,10的文章。当我打的时候   在上面的查询中,它给出了所有3个结果。但是,如果我将id更改为   除了8,9,10以外的任何东西。它没有显示任何结果。但它表明   当id是8,9或10

中的任何一个时的所有结果

当条件Article匹配时,您发现某个特定select distinct user.articles与某个用户相关联,但您要求提供该用户的文章 select distinct article from User as user inner join user.articles as article where article.user.username = 'sammer' and article.id = 8 而不是找到你刚发现的文章。这就是为什么你最终得到所有用户的文章8,9,10。

如果您想获得第8条,请执行以下操作:

struct ListNode<T> {
    val: T,
    tail: List<T>
}

struct List<T>(Option<Box<ListNode<T>>>);

article.id 8不存在或其链接用户具有其他名称时,将返回文章或无/例外。