HQL查询连接表

Jer*_*dev 6 java hql

我正在使用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查询?谢谢.

Yog*_*ngh 5

试试以下:

   from Products p INNER JOIN p.productlanguages pl
   where pl.languages.shortname ='eng'
Run Code Online (Sandbox Code Playgroud)

我假设你已经映射了Product-Productlanguages关系图OneToManyProductlanguages-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)