2012-11-06 126 views
6

我正在使用hibernate连接到我的数据库的项目。HQL查询连接表

我想要一个查询,使用特定语言的描述和名称从我的数据库中获取产品。我所拥有的参数是该语言的短名称,所以首先我必须获取该语言的ID,然后以所需语言获取文本。

我试过下面的hql查询,但没有成功。

from Products as p 
where p.productlanguages.languages.shortname like 'eng' 

这是数据库的部分的图像,其中数据应该来自: database

我已经得到了期望的结果与SQL查询,但我似乎无法得到它在休眠中工作。但我宁愿在hql中这样做。

SELECT * FROM products p 
INNER JOIN productlanguage pl ON pl.Products_id = p.id 
WHERE pl.Languages_id = 
(
SELECT id FROM languages 
WHERE Shortname = 'eng' 
); 

任何人都可以告诉我如何构建这个hql查询吗? 谢谢。

回答

5

如下尝试:

from Products p INNER JOIN p.productlanguages pl 
    where pl.languages.shortname ='eng' 

我假设你已经映射为您的E-R图描绘Product-Productlanguages关系,OneToManyManyToOneProductlanguages-Langages关系。

编辑:似乎有在行public Languages getLanguages() {barcodeProductlanguage映射一个错字,到底除去barcode

@ManyToOne(fetch=FetchType.LAZY) 
@JoinColumn(name="Languages_id", nullable=false, insertable=false, updatable=false) 
public Languages getLanguages() {barcode 

    return this.languages; 
} 
+0

这个工作,但现在我不能把结果放在集。 – Jerodev

+0

@Jerodev:这应该返回带有独特产品实体的“List ”。 –

+0

这是我的模型代码:[http://pastebin.com/8aM5eKYx](http://pastebin.com/8aM5eKYx)。每当我尝试查询你提供的时候,我会得到一个错误,说'无法用[0]参数找到方法[getBarcode]'。 – Jerodev