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