如何在hibernate中使用join来获取三个表中的记录?

时间:2013-12-02 07:29:17

标签: java mysql hibernate hql

我在mysql中使用了这个命令并轻松检索了我的记录,但是我无法用Java做到这一点。 请指教。

select * from table1 
   LEFT JOIN table2 ON table1.FRID=table2.FRID 
   LEFT JOIN table3 ON table1.FRID=table3.FRID 
 where table1.FRID='000000338';

如何使用hibernate(条件或HQL)在Java中执行此操作。

2 个答案:

答案 0 :(得分:0)

在Hibernate中你必须在Objects(OO)中思考。因此,您的查询中的表应更改为实体。等等。 如果表(实体)之间的关系在实体中定义,则Hibernate将仅允许表之间的连接。 (例如@OneToMany等注释)

所以,如果定义了必要的关系,那么HQL就好像(假设您加入的2个表,通过Hibernate与“table1”链接/映射):

from Table1Class as table1alias
left join fetch Table2Class
left join fetch Table3Class
where table1alias.idPropertyInTable1Class = '000000338'

如果您不希望Hibernate返回实体,您应该查看ResultTransformer,例如here

答案 1 :(得分:0)

除非您显示映射,否则没有任何有意义的答案。

您要注意的一件事是:不要将Hibernate视为访问数据库的另一种语言。您应该将其视为对象关系映射工具。完成映射后,在大多数情况下,您应该使用域模型,而不是考虑数据库表。

假设您已经为Table1-3正确映射了您的实体(让我们调用实体Foo1,Foo2和Foo3),并且您也有适当的映射关系,那么HQL应该是

select foo from Foo1 foo
left join fetch foo.foo2
left join fetch foo.foo3
where foo.id = '000000338'