使用hibernate查询连接三个表

时间:2011-11-12 16:02:22

标签: java hibernate join

我非常抱歉打扰Stack Overflow关于那些hibernate查询的另一个问题,但它已经过了四个小时左右我已经尝试解决这个问题,到目前为止还没有成功。

问题如下。我有一个模型可以处理" Quotes"," Sources"和"职位"。报价是书籍,戏剧,论文等的引用 - 这种多样性是什么"来源"对象是。引用在源中的确切位置是位置。所以,例如," blablablabla" (引用)在第5章"第12页上。 (位置)"编程艺术" (来源)。

现在,我希望得到每个"职位"已经注册了" Source"。但是这两者之间没有直接映射,我想避免建立这种联系(尽管我开始相信没有其他解决方案)。另一方面,Quote对象有一个Source和一个Position。

这是引用类的摘录:

public class Quote
{

   @ManyToOne(cascade=CascadeType.ALL)
   Position position;

   @ManyToOne(cascade=CascadeType.ALL)
   Source source;

       // ... other stuff

}

起初,我只是得到一些"没有加入的路径"异常,所以我读了Stack Overflow上可以找到的所有内容。如果我理解正确,我的查询应该类似于:

currentSession.createQuery("from Position 
inner join Quote quote, Source source where  quote.source = :idSource");

但即便如此,我也有这个例外:

Unable to resolve path [quote.source], unexpected token [quote]

我在某个地方犯了错误,还是我对Hibernate提出了太多要求?提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您正在寻找的查询是:

select q.position
  from Quote q
 where q.source = :source

请注意,您应该将实际Source实体作为参数传递到此处;如果您只想传递其ID,则最后一行应该读取where q.source.id = :idSource(假设您的标识符属性为id)。