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
