HQL查询连接表

时间:2012-11-06 17:08:46

标签: java hql

我正在使用hibernate连接到我的数据库以进行项目。

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

我尝试过以下hql查询,但没有成功。

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

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

我有一个sql查询所需的结果,但我似乎无法让它在hibernate中工作。但我更愿意在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查询吗? 谢谢。

1 个答案:

答案 0 :(得分:5)

尝试以下:

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

我假设您已将Product-Productlanguages关系OneToManyProductlanguages-Langages关系映射为ManyToOne,如您的E-R图所示。

编辑: Productlanguage行的public Languages getLanguages() {barcode映射中似乎存在拼写错误,最后删除了barcode

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

    return this.languages;
}