Tengo un componente compuesto que tiene una referencia muchos a uno.¿Cómo evito una "selección N + 1" y especifico una estrategia de búsqueda para (N) tipo de usuario Hibernación que tiene muchos a uno?
class MyComposite
{
SomeEntity ManyToOne { get; set; }
SomeOtherUserType Value { get; set; }
}
Para facilitar la asignación, he hecho una costumbre ICompositeUserType
cuales encompases este componente:
class MyCompositeUserType : ICompositeUserType
{
// ...
private static readonly IType[] _propertyTypes = new[]
{
new ManyToOneType("SomeEntity"),
new CustomType(typeof(SomeOtherUserType))
};
// ...
}
Ahora, tengo una colección de composite-element
s que incluyen este componente:
<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>
Cuando consulto en la clase Container
, el conjunto Pairings
se carga con entusiasmo, como diseño ed, sin embargo, luego obtengo un N + 1 seleccione en el SomeEntity
que forma parte del MyCompositeUserType
. Quiero cargar esas entidades junto con la combinación en el conjunto Pairings
.
¿Cómo se puede especificar esto?
¿Qué código se está utilizando para consultar? ¿Estás especificando un Fetch para cargar las entidades relacionadas? Si es así, ¿está utilizando un transformador para eliminar los elementos raíz duplicados? – cdmdotnet
No se extraen extracciones en la consulta. Es solo una lista ToList. – codekaizen
¿Existe alguna razón por la que necesite 'ICompositeUserType' en lugar del mapeo' '? –
Firo