5
我有一個複合組件,它具有多對一的參考。如何避免「N + 1選擇」並指定具有多對一的(N)Hibernate用戶類型的獲取策略?
class MyComposite
{
SomeEntity ManyToOne { get; set; }
SomeOtherUserType Value { get; set; }
}
爲了便於測繪的,我做了一個自定義的ICompositeUserType
其encompases這個組件:
class MyCompositeUserType : ICompositeUserType
{
// ...
private static readonly IType[] _propertyTypes = new[]
{
new ManyToOneType("SomeEntity"),
new CustomType(typeof(SomeOtherUserType))
};
// ...
}
現在,我的composite-element
S的包括該組件的集合:
<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
集合上加載這些實體以及連接。
這怎麼指定?
當它映射到一個或它應該是可以設置fetchmode?你是否指定了一個Fetch來加載相關的實體?如果是的話,那麼你使用轉換器來刪除重複的根元素? – cdmdotnet 2012-05-01 21:30:52
對查詢沒有多餘的提取。這僅僅是一個ToList。 – codekaizen 2012-05-01 21:42:27
是否有原因需要'ICompositeUserType'而不是''映射? –
Firo
2012-05-08 09:01:09