2012-04-23 24 views
1

在這方面的一些問題: -在休眠中映射Oracle 11g虛擬列

a。是否有一個特定的休眠模式type用於oracle 11g虛擬列或本地用戶可以執行的操作?

b。如果要使用類型(例如,string,long)(並且在hql查詢中使用它們時工作正常),那麼如何使用Criteria API獲取映射到虛擬列上的屬性?

c。目前,標準查詢返回這樣的屬性爲空,儘管它們確實具有值。作爲替代,我通過調用用於派生虛擬列的函數並使用實際值返回結果集來使用formula元素。但是,由於處理開銷再次轉移到休眠/應用程序代碼,因此在表中創建虛擬列是沒有用的。

有什麼建議嗎?

+0

當調用sproc的處理是在oracle不是客戶端完成的。它基本上與提取虛擬列不一樣? – Firo 2012-05-03 08:23:03

+0

是的,這是我想。但即使在oracle中,開銷也是爲了顯式調用pl/sql函數。虛擬列通過消除這種開銷而帶來好處。還有一件事,標準查詢使用了連接。也許在某個地方,虛擬列被取爲空。有沒有辦法在標準查詢中控制連接的行爲? – 2012-05-04 10:56:14

+0

嘗試捕獲由nhibernate(內部記錄器/ log4net)生成的SQL並直接運行它,如果它返回正確的結果那麼問題是在NH映射端否則它是數據庫返回空值 – Firo 2012-05-04 11:43:38

回答

1

這似乎是一個虛擬列的問題,沒有什麼Hibernate可以做的,因爲它只是生成sql。

最簡單的方法是使用公式屬性而不是虛擬列。如果虛擬列是預先計算的,那麼你可以使用普通的列和觸發器來模擬它們。