我正在使用hibernate连接到我的数据库以获得项目.
我想要一个查询,使用特定语言的描述和名称从我的数据库中获取产品.我所拥有的参数是该语言的简称,因此首先我必须获取该语言的id,然后获取所需语言的文本.
我尝试了以下hql查询,但没有成功.
from Products as p
where p.productlanguages.languages.shortname like 'eng'
Run Code Online (Sandbox Code Playgroud)
这是数据库中应该来自的部分的图像:

我有一个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'
);
Run Code Online (Sandbox Code Playgroud)
谁能告诉我如何构建这个hql查询?谢谢.
试试以下:
from Products p INNER JOIN p.productlanguages pl
where pl.languages.shortname ='eng'
Run Code Online (Sandbox Code Playgroud)
我假设你已经映射了Product-Productlanguages关系图OneToMany和Productlanguages-Langages关系,ManyToOne如你的ER图所示.
编辑: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;
}
Run Code Online (Sandbox Code Playgroud)