我有这两个sql脚本,我得到一些问题执行在hql中的转换,将用于来自JPA的查询:
SELECT f.idprovider, pe.name from provider f
inner join person pe
on(f.idperson = pe.idperson)
inner join product_provider pf
on(f.idprovider = pf.idprovider)
inner join product p
on(pf.idproduct = p.idproduct)
inner join item i
on(p.idproduct = i.idproduct)
where i.iditem = 1
SELECT f.idprovider, pe.name, pe.cnpjf from product_provider pf
inner join provider f
on(pf.idprovider = f.idprovider)
inner join coliseusys.person pe
on(f.idperson = pe.idperson)
inner join product p
on(pf.idproduct = p.idproduct)
where p.idproduct = (select p2.idproduct from item i inner join product p2
on(i.idproduct = p2.idproduct) where i.iditem = 1)
这些sql做同样的事情,我已经尝试了很多做HQL从任何它,没有结果。hibernate中的映射是可以的。
任何想法?
立即翻译:
select f.id, pe.name from Provider f
inner join f.person pe
inner join f.products p
inner join p.items i
where i.id = :itemId
这里假设
- Provider与Person有toOne关联
- 提供者与产品有许多关联,使用连接表product_provider
- Product与Item 存在onetmany关联
如果不是这样,那么描述你的映射,因为在不知道实体的情况下做HQL是不可能的。这就像在不了解表的情况下做SQL。
你应该阅读http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#queryhql。它有很多HQL查询的例子,并详细解释了它们是如何工作的。