2011-08-01 147 views
1

我有两个表,表A和tableB的:标准查询外连接子查询

tableA: int id, String val 
tableB: int id, String logs, int a_ref. 

我需要创建一个查询,如:

SELECT tabB.* FROM tableB tabB 
LEFT OUTER JOIN tableA tabA ON tabA.id = tabB.a_ref; 

但我不能改变的元数据(修改相应表的Hibernate映射文件(.hbm))。

如何在hibernate中为此创建条件查询?

在此先感谢。

回答

1

HQL或Criteria查询是基于实体和实体之间的关系,并且您没有向我们展示实体,所以我们只能推测。如果TABLEA映射到TableATABLEB映射到TableB,与表B和表A之间的许多-to-one关联,那么查询是显而易见的:

select b from TableB b left join b.tableA 

但需要注意的是左联接是完全无用这里,因为它不会对查询添加任何限制,并且查询不会从TABLEA中选择任何内容。您的初始SQL查询应该写作select tabB.* from TABLEB tabB。并且标准查询将因此只是

Criteria c = session.createCriteria(TableB.class) 
+0

在hbm文件中,TableA和TableB之间没有关联。 – Incredible

+0

然后,您将无法在不使用本机SQL查询或修复映射的情况下进行连接。 –

+0

我可以创建一个这样的查询: - select TABLEB。* TABLEB tabB 左外部联接(从TABLEA tabA_中选择tabA_.ID)参考refer.ID = tabB.a_ref; HQL,AFAIK,no。中的 – Incredible