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
