我正在使用hibernate连接到我的数据库以进行项目。
我想要一个查询,使用特定语言的描述和名称从我的数据库中获取产品。我所拥有的参数是该语言的简称,因此首先我必须获取该语言的id,然后以所需语言获取文本。
我尝试过以下hql查询,但没有成功。
from Products as p
where p.productlanguages.languages.shortname like 'eng'
这是数据库中应该来自的部分的图像:
我有一个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查询吗? 谢谢。
答案 0 :(得分:5)
尝试以下:
from Products p INNER JOIN p.productlanguages pl
where pl.languages.shortname ='eng'
我假设您已将Product-Productlanguages
关系OneToMany
和Productlanguages-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;
}