我在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中执行此操作。
答案 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'