0

列が以下のようなDBにテーブルがあります。

Id   Name     Publisher          ParentId
------------------------------------------    
100  Sample1  ExamplePublisher   NULL
200  Sample2  ExamplePubl3       100

Hibernate のマッピングは以下のようになります。

   <class name="PaperMaster">
        <composite-id>
            <key-property name="Id"></key-property>
            <key-property name="AreaId"></key-property>
        </composite-id>       
        <property name="Name"></property>
        <property name="Parent"></property>
        <property name="Publisher"></property>
        <property name="YearStarted"></property>
        <bag name="ChildCollection" table="PaperMaster" lazy="false" 
                  inverse="true">
            <key>
                <column name="Parent"></column>
                <column name="AreaId"></column>
            </key>
           <key column="Parent"></key>
            <one-to-many class="PaperMaster"></one-to-many>
        </bag>        
        <many-to-one name="ParentObject" column="Parent">
            <column name="Parent"></column>
            <column name="AreaId"></column>
        </many-to-one>        

    </class>

以下のように NHIbernate にクエリを実行すると、子コレクションが適切に入力されたオブジェクトを正常に取得できます。

   IList<PaperMaster> allList = se.CreateQuery("select e from PaperMaster e join fetch
      e.ChildCollection where e.Id=100")
                .SetResultTransformer(new DistinctRootEntityResultTransformer())
                .List<PaperMaster>();

私が直面している問題は、非常にコストがかかると思われるオブジェクトを埋めるためにクエリが実行される各子に対してです。これを簡単にする方法はありますか?たとえば、単一のクエリで完全な関係を取得できるはずです。

4

1 に答える 1

1

クエリの量を減らす 1 つの方法はbatch-size="25"、バッグ マッピングを追加することです。

例えば

 <bag name="ChildCollection" table="PaperMaster" lazy="false"
     batch-size="25" inverse="true">

これにより、クエリの量が大幅に削減されます。

于 2011-04-06T12:16:54.580 に答える