2013-07-30 68 views
1

加入基本上這裏的概率:休眠:甲骨文(+)自主表

  1. 我不能改變現有的查詢「(+)」加入
  2. 我需要使用Hibernate。
  3. 我不能把這些獨立的表之間的關聯。

我走到這一步,是使用

entityMgr.createNativeQuery("my join (+) query here");

我然後將其存儲在一個通用的

List<Object> list = query.getResultList()

,並通過獲得的列值

for(Object obj: list) { 
     firstColVal = obj[1] 
     ... 
    } 

問題:這是我擁有的最佳選擇嗎?有更好的解決方案嗎?

編輯:你們可以提出比休眠更貼合ORM框架:)

+0

你可以分享爲什麼你不能刪除該運營商? –

+0

查詢將以這種方式工作,但在這種情況下,我沒有像往常一樣使用Hibernate ... –

+0

@Vash,客戶端規範加上傳統數據庫。 – Incognito

回答

0

神諭聯接操作,你不能從你的查詢中刪除,因爲它是ANSI標準出臺前已經過時了。

該運算符不同於典型的連接,但主要區別在於,您可以使用ANSI符號進行較少的操作。

您的解決方案可能是創建一個數據庫視圖,該數據庫將映射到代碼中。但是你的解決方案仍然有效。您還可以添加result transformer,這將生成有效的結果元組。

+0

它不被棄用 - 仍然可用。這不是_that_不同;它以相同的方式工作請參閱http://stackoverflow.com/questions/1193654/difference-between-oracles-plus-notation-and-ansi-join-notation – Ben

+0

@Bem,Oracle建議不要在新代碼中使用它,並確定炒鍋不同。因爲它僅適用於where子句,並且它不在該塊上操作。因此,它有其侷限性,您可以創建一個ANSI查詢,它可以用作(+),但反之亦然。 –

+0

@Ben,請參閱外連接部分http://docs.oracle.com/cd/B28359_01/server.111/b28286/queries006.htm –