首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免"N+1选择“并为(N)Hibernate用户类型指定具有多对一的获取策略?

如何避免"N+1选择“并为(N)Hibernate用户类型指定具有多对一的获取策略?
EN

Stack Overflow用户
提问于 2012-04-28 02:00:09
回答 1查看 312关注 0票数 5

我有一个复合组件,它有一个多对一的引用。

代码语言:javascript
复制
class MyComposite
{
    SomeEntity ManyToOne { get; set; }
    SomeOtherUserType Value { get; set; }
}

为了便于映射,我制作了一个包含以下组件的自定义ICompositeUserType

代码语言:javascript
复制
class MyCompositeUserType : ICompositeUserType
{
    // ...
    private static readonly IType[] _propertyTypes = new[]
                                   {
                                       new ManyToOneType("SomeEntity"), 
                                       new CustomType(typeof(SomeOtherUserType))
                                   };
    // ...
}

现在,我有了一个composite-element的集合,其中包括以下组件:

代码语言:javascript
复制
<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集将被急切地加载,但是,我在SomeEntity上得到一个N+1选择,它构成了MyCompositeUserType的一部分。我想在Pairings集中加载这些实体以及联接。

如何具体说明这一点?

EN

回答 1

Stack Overflow用户

发布于 2012-05-17 17:59:38

如果映射为组件,则可以将其映射到带有lazy="false“的一个组件,或者在查询时可以设置取取模式。

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10359957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档