5

多対1の参照を持つ複合コンポーネントがあります。

class MyComposite
{
    SomeEntity ManyToOne { get; set; }
    SomeOtherUserType Value { get; set; }
}

マッピングを簡単にするために、ICompositeUserTypeこのコンポーネントを含むカスタムを作成しました。

class MyCompositeUserType : ICompositeUserType
{
    // ...
    private static readonly IType[] _propertyTypes = new[]
                                   {
                                       new ManyToOneType("SomeEntity"), 
                                       new CustomType(typeof(SomeOtherUserType))
                                   };
    // ...
}

今、私composite-elementはこのコンポーネントを含むのコレクションを持っています:

<class name="Container">
...
<set name="Pairings"
     cascade="all-delete-orphan"
     generic="true"
     lazy="false"
     table="Pairings"
     fetch="join">
    <key column="ContainerId" />
    <composite-element class="Pair">
        <property name="Item1" type="mycomposite" lazy="false">
            <column name="Entity1Id" />
            <column name="Amount1" />
        </property>
        <property name="Item2" type="mycomposite" lazy="false">
            <column name="Entity2Id" />
            <column name="Amount2" />
        </property>
        <property name="Tag" column="Tag" />
    </composite-element>
</set>
</class>

Containerクラスをクエリすると、Pairings設計どおりにセットが熱心に読み込まれますが、の一部を形成するN+1が選択されます。セットの結合と一緒にそれらのエンティティをロードしたいと思います。SomeEntityMyCompositeUserTypePairings

これはどのように指定できますか?

4

1 に答える 1

0

コンポーネントとしてマップされている場合は、lazy="false" を使用して複数のコンポーネントを 1 つにマップできます。または、クエリ時に fetchmode を設定できるはずです。

<composite-element class="Pair">
    <component name="Item1">
        <many-to-one name="Entity1" column="Entity1Id" />
        <property name="Amount" column="Amount1" />
    </component>
    <component name="Item2">
        <many-to-one name="Entity2" column="Entity2Id"/>
        <property name="Amount" column="Amount2" />
    </component>
    <property name="Tag" column="Tag" />
</composite-element>
于 2012-05-17T17:59:38.397 に答える