7

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

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

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

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

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

我通过 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 查询?谢谢你。

4

1 回答 1

5

试试下面:

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

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

编辑:Productlanguage line 的映射似乎有错字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;
}
于 2012-11-06T17:12:51.470 回答