2011-10-23 19 views
2

DBにT1とT2の2つのテーブルがあります。 T1の1列は、T2を参照する外部キーです。私は処理のためにT1とT2の列の一部だけが必要なので、必要な列だけを含むDTO T1T2を作成しました。 Hibernateを使ってDTOをこれら2つのテーブルにマップするには、class要素のsubselect属性を使用しました。Read Only Multitable DTO + Hibernate

<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> 

I iは、オブジェクトを選択する必要がある場合は、Hibernateは、2つの選択(他へのもの)に要求を変換することに気づきました。

これを行うより良い方法はありますか?パフォーマンスについてどう思いますか?

おかげ

答えて

4

あなたは例hereのようにクエリからDTOを埋めるために、より良い、DTOを作成している場合。バッキングテーブルがある場合にのみエンティティを作成します。

非常に頻繁にDTOを使用する場合は、DBにビューを作成し、それを参照する簡単なDTOエンティティを作成することができます。ビューはDB内であらかじめコンパイルされているので、より速くなります。

+0

あなたの答えをありがとう。この[リンク](http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/mapping.html)(5.1.1節)では、副選択の使用について説明します。私の質問は、照会に他の方法の代わりに副選択を使用する必要がある場合です。 –

+0

リンクに記載されているように、_ビューを使用することもできますが、データベースに(つまり、従来のスキーマを使用して)ビューを作成することはできません。この場合、不変の読み取り専用エンティティを指定されたSQL副選択式にマップすることができます。可能であれば、その眺めに行ってください。 – ManuPK

関連する問題