batch-size y/o multi-query y/o multi-criteria

2010/5/18 Bilbo88 <[email protected]>

> Hola de nuevo,
>
> Al final después de mucho buscar encontré esta página:
>
> http://ayende.com/Blog/archive/2006/05/02/CombatingTheSelectN1ProblemInNHibernate.aspx
>
> En la que aparece esta solución y que comentan que este comportamiento
> no es una "issue" si no una "feature" :O
>
> La forma de solucionar lo es:
>
> (Buscar la colección hija y añadirla al objeto principal.)
> IList withDuplicates = session.... ;
> ISet withoutCollections = new HashedSet(withDuplicates);
>
>
> No me parece lo mas ortodoxo pero es una solución para cuando tienes
> solo un objeto padre.
> ¿Pero que sucede si tiene una colección de objetos instalaciones?
> ¿Tengo que recorrerlos todos buscar sus horarios y enlazarlos? Esta
> solución no me acaba de convencer. No se si existirá otra manera de
> hacer esto si alguien sabe como mejorarlo le agradecería que me la
> explicase,
>
> Atentamente,
>
> Raúl Bullido
>
>
> On 11 mayo, 13:23, Bilbo88 <[email protected]> wrote:
> > Hola Grupo,
> >
> > Estoy teniendo unas dificultades a la hora de incluir colecciones en
> > mis clases. Estoy intentando que alguna de las colecciones que tiene
> > mi clase InstalacionDN se carguen en una sola select ya que estamos
> > comprobando que se envían muchas sentencias select  y queremos que el
> > horario de las instalaciones se monte automáticamente en la clase
> > anteriormente nombra.
> >
> > He probado a mapear la propiedad horarios como lazy = “false” pero
> > esto me produce una sentencia de consulta extra por cada instalación
> > que resulta de mi búsqueda inicial.
> >
> > Así que probé con la propiedad outer-join="true" y sí, me lanza solo
> > una select pero por el contrario me trae tantos objetos instalaciones
> > como horarios tenga este:
> >
> > Si intalación1 tiene un horario de 10:00 a 14:00, otro de 17:00 a
> > 21:00 y sábados de 10:30 a 15:00. Me encuentro con que la instalacion1
> > se carga 3 veces en mi List.
> >
> > He probado también con fetch="join" y me sucede exactamente igual, me
> > triplica el objeto en el List
> >
> > ¿Existe alguna forma para “aplanar” y solo obtener una instalación con
> > sus horarios cargados en memoria y que no necesite lanzar select
> > extras?
> >
> > Indicar que estoy usando la versión 1.2 de NHibernate.
> > Os paso mapeo de intalacionDN:
> >
> > <?xml version="1.0" encoding="utf-8" ?>
> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
> >   <class name="domain.InstalacionDN, domain"
> >          table="Instalaciones"
> >          lazy="true"
> >          schema="dbo"
> >           >
> >
> >     <!--Heredados de GenericFWKObj-->
> >     <id name="Id" column="ID" unsaved-value="0">
> >       <generator class="native" />
> >     </id>
> >
> >     <!--Heredados de GenericDomainObj-->
> >
> >     <property name="BorradoLogico" column="BorradoLogico"/>
> >
> >     <!--Heredados de GenericDomainObj-->
> >     <property name="ObservacionesBD" column="ObservacionesBD" />
> >     <property name="FechaAltaBD" column="FechaAltaBD" type="DateTime"/
> >
> >     <property name="FechaModificacionBD" column="FechaModificacionBD"
> > type="DateTime"/>
> >     <property name="UsuarioAltaBD" column="UsuarioAltaBD"/>
> >     <property name="UsuarioModificacionBD"
> > column="UsuarioModificacionBD"/>
> >
> >     <!--Propiedades específicas de la entidad-->
> >     <property name="Nombre" column="Nombre"/>
> >     <property name="Tipo" column="Tipo"/>
> >     <property name="Direccion" column="Direccion"/>
> >     <property name="Urbanizacion" column="Urbanizacion"/>
> >     <property name="Bloque" column="Bloque"/>
> >     <property name="Numero" column="Numero"/>
> >     <property name="Escalera" column="Escalera"/>
> >     <property name="Piso" column="Piso"/>
> >     <property name="Puerta" column="Puerta"/>
> >     <property name="CodPostal" column="CodPostal"/>
> >     <property name="Localidad" column="Localidad"/>
> >
> >     <!--<property name="Localidad"  formula="(SELECT
> > Localidades.Nombre FROM Localidades
> >                        WHERE Localidades.ID= LocalidadId)
> >                        "/>-->
> >
> >     <property name="Tlf" column="Tlf"/>
> >     <property name="Fax" column="Fax"/>
> >     <property name="FechaAlta" column="FechaAlta" type="DateTime"/>
> >     <property name="FechaBaja" column="FechaBaja" type="DateTime"/>
> >     <property name="CodigoTES" column="CodigoTES" generated="insert"
> > insert="false" update="false" />
> >     <property name="CodigoTMME" column="CodigoTMME" insert="false"
> > update="false" />
> >     <property name="Email" column="Email" />
> >     <property name="IdentificacionCorporativa"
> > column="IdentificacionCorporativa"/>
> >     <property name="RetailConcept" column="RetailConcept"/>
> >
> >     <!--Relaciones con otras entidades-->
> >     <many-to-one name="Provincia" column="ProvinciaID" class="
> > domain.ProvinciaDN, domain"/>
> >     <many-to-one name="Concesionario" column="ConcesionarioID"
> > class="domain.ConcesionarioDN, domain"/>
> >     <many-to-one name="Marca" column="MarcaID" class="domain.MarcaDN,
> > domain"/>
> >     <many-to-one name="TipoVia" column="ViaTipoId"
> > class="domain.ViaTipoDN, domain" />
> >     <many-to-one name="LocalidadInstalacion" column="LocalidadID"
> > class="LocalidadDN, domain"/>
> >
> >     <set name="CPsInfluencia" table="InstalacionesCodPostales"
> > lazy="false">
> >       <key column="InstalacionId"/>
> >       <many-to-many column="CodPostalId" class="domain.CodPostalDN,
> > domain"/>
> >     </set>
> >
> >     <set name="Empleados">
> >       <key column="InstalacionId"/>
> >       <one-to-many class="domain.EmpleadoDN, domain"/>
> >     </set>
> >
> >     <set name="Actividades" table="InstalacionesActividades"
> > lazy="false">
> >       <key column="InstalacionId"/>
> >       <many-to-many column="ActividadId" class="domain.ActividadDN,
> > domain"/>
> >     </set>
> >
> >     <set name="Horarios" table="InstalacionesHorarios"  outer-
> > join="true">
> >       <key column="InstalacionId"/>
> >       <many-to-many column="HorarioId" class="domain.HorarioDN,
> > domain"/>
> >     </set>
> >
> >   </class>
> > </hibernate-mapping>
> >
> > Os paso mapeo de HorarioDN por si hace falta:
> >
> > <?xml version="1.0" encoding="utf-8" ?>
> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
> > <class name="domain.HorarioDN, domain" table="Horarios" lazy="true"
> > schema="dbo" >
> >
> > <!--Heredados de GenericFWKObj-->
> > <id name="Id" column="ID" unsaved-value="0">
> >   <generator class="native" />
> > </id>
> >
> > <!--Heredados de GenericDomainObj-->
> > <property name="ObservacionesBD" column="ObservacionesBD" />
> > <property name="FechaAltaBD" column="FechaAltaBD" type="DateTime"/>
> > <property name="FechaModificacionBD" column="FechaModificacionBD"
> > type="DateTime"/>
> > <property name="UsuarioAltaBD" column="UsuarioAltaBD"/>
> > <property name="UsuarioModificacionBD" column="UsuarioModificacionBD"/
> >
> >
> >
> > <property name="BorradoLogico" column="BorradoLogico"/>
> >
> > <!-- Propiedades específicas de la entidad  -->
> >  <property name="Descripcion" column="Descripcion" />
> >  </class>
> > </hibernate-mapping>
> >
> > Un saludo y muchas gracias,
> >
> > Raúl Bullido
> >
> > --
> > Para escribir al Grupo, hágalo a esta dirección:
> [email protected]
> > Para más, visite:http://groups.google.com/group/NHibernate-Hispano
>
> --
> Para escribir al Grupo, hágalo a esta dirección:
> [email protected]
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>



-- 
Fabio Maulo

-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano

Responder a