2011-10-23 57 views
2

我有兩個表在我的DB,T1和T2。 T1的一列是引用T2的外鍵。我只需要T1和T2的一部分列進行處理,因此我創建了一個只包含必要列的DTO T1T2。爲了使用Hibernate將DTO映射到這兩個表,我使用了類元素的subselect屬性。只讀多DTO +休眠

<hibernate-mapping> 
<class 
    name="com.xconnect.cdrrecorder.processing.dto.IngressNumRuleVoipProfile" 
    table="numbermodificationrules" 
    subselect="select ... from T1 left join T2 on id1=id2 where ..."> 

    <cache usage="read-only"/> 

... 

</class> 
</hibernate-mapping> 

我注意到,當我需要選擇一個對象時,Hibernate將請求轉換爲兩個選擇(一個到另一個)。

有沒有更好的方法來做到這一點?你對演出有什麼看法?

感謝

回答

4

如果要創建一個DTO,更好地從查詢填補了DTO作爲一個例子here。如果有備份表,只創建實體。

如果經常使用DTO,您可以在數據庫中編寫視圖並創建一個簡單的DTO實體來引用該視圖。由於視圖是在DB中預編譯的,所以速度會更快。

+0

感謝您的回答。在這[鏈接](http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/mapping.html)(5.1.1節)中,解釋了使用子選擇。我的問題是,在哪些情況下,我們需要使用子查詢來代替其他查詢方式? –

+0

正如鏈接中所述,_有時您想使用視圖,但不能在數據庫中創建一個視圖(即使用傳統模式)。在這種情況下,您可以將不可變且只讀的實體映射到給定的SQL子查詢表達式_。如果可以的話,去看看。 – ManuPK