2011-08-01 182 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