Hola mouthbow, Algo que ayuda mucho en las consultas es que nos cuentes como es tu modelo (ademas de los mappings). Parece ser que tu enfoque esta muy orientado a la base de datos, por ejemplo con tu entidad ViewListadoFacturas.
Es muy dificil entender (y mucho mas utilizar) un ORM si no dedicas un poco de tiempo a pensar tu modelo. En general los ORMs funciona mucho mejor y es mas facil usarlos, cuando tienes un modelo basados en objetos. Una de las opciones que tienes para resolver este problema es que todos los elementos que relacionas a tu coleccion implementen alguna interfaz o tengan una clase base, lo cual es razonable en un modelo de objetos, caso contrario, como podria manejarlos tu objeto si no tienen nada en comun? Has pensado en eso? ---------------------------------- Carlos Peix 2012/10/8 mouthbow <[email protected]> > Hola Marcos, > > Ante todo muchísimas gracias por tu respuesta. > > He revisado el código que me mandas y no termino de ver como sabe > NHibernate la columna de origen con la que debe hacer el filtrado de la > subcoleccion. > Es decir, según esto: > > <set name="NotasElementosList"> > <key column="**CodigoElementoAsociado" /> > <one-to-many class="NotasElementos" /> > </set> > > Entiendo que ahí dice: defino una coleccion llamada NotasElementosList que > se alimenta de la tabla NotasElementos, y debo filtrar en esa tabla por el > campo CodigoElementoAsociado. > Sin embargo no dice en ningún sitio: Al filtrar por la columna > CodigoElementoAsociado debes utilizar el valor de la columna CodigoCliente > (y no el id definido que es lo que supongo que haría, no?) > > <set name="NotasElementosList"> > <sourcekey column="**CodigoCliente" /> > <key column="**CodigoElementoAsociado" /> > <one-to-many class="NotasElementos" /> > </set> > > ¿Esto es posible? > > Gracias de nuevo! > > El sábado, 6 de octubre de 2012 01:05:08 UTC+2, Marcos Mellibovsky > escribió: > >> Hola mouthbow: >> >> Me parece que asi te deberia andar: >> <class name="ViewListadoFacturas"> >> <id type="Guid"> >> <generator class="guid" /> >> </id> >> <property name="CodigoFactura" /> >> <property name="CodigoCliente" /> >> <set name="NotasElementosList"> >> <key column="**CodigoElementoAsociado" /> >> <one-to-many class="NotasElementos" /> >> </set> >> </class> >> >> public class ViewListadoFacturas >> { >> public virtual Guid CodigoFactura { get; set; } >> >> public virtual Guid CodigoCliente { get; set; } >> >> public virtual ISet<NotasElementos> NotasElementosList { get; >> set; } >> } >> >> >> El jueves, 4 de octubre de 2012 10:54:51 UTC-3, mouthbow escribió: >>> >>> Buenas tardes a tod@s! >>> >>> Tengo una pregunta que creo que lo mismo es básica pero no encuentro >>> forma de hacer: >>> >>> Necesito definir un set en un archivo de mapping con unas necesidades >>> especiales. He leído varias páginas pero no encuentro nada. >>> Supongamos que tengo un mapping de una Vista SQL >>> >>> >>> <class name="Namespace.**ViewListadoFacturas, Assembly" >>> table="ViewListadoFacturas"> >>> >>> <id name="CodigoFactura" column="[CodigoFactura]" type="System.Guid"> >>> <generator class="assigned"/> >>> </id> >>> <property name="CodigoCliente" column="[CodigoCliente]" >>> access="field.pascalcase-**underscore" not-null="true" >>> type="System.Guid"/> >>> >>> </class> >>> >>> >>> Y supongamos que luego un mapping de una clase como este: >>> >>> >>> <class name="Namespace.**NotasElementos, MyAssembly" >>> table="NotasElementos" > >>> >>> <id name="Id" column="CodigoNota" type="System.Guid"><generator >>> class="guid"/></id> >>> <property name="CodigoElementoAsociado" column="**CodigoElementoAsociado" >>> access="field.pascalcase-**underscore" not-null="false" >>> type="System.Guid" insert="true" update="true"/> >>> >>> </class> >>> >>> >>> Donde CodigoCliente de la Vista y CodigoElemento asociado guardan los >>> mismos valores y por tanto podríamos hacer un inner join entre ellos pero >>> se llaman diferente. >>> El nombre es diferente porque en la clase NotasElementos también guardo >>> Notas de Proveedores, Usuarios, etc... De ahí sale el concepto de >>> CodigoElementoAsociado. >>> >>> Al usar Guids evito que dos elementos de clases diferentes compartan ids. >>> >>> La pregunta es: >>> >>> ¿Como puedo mapear las notas del cliente en la vista? Yo necesito hacer >>> algo así: >>> >>> >>> >>> <set name="NotasElementosList" cascade="none" inverse="true" lazy="true" >>> access="field.pascalcase-**underscore"> >>> <Source key> >>> <column name="CodigoCliente" /> >>> </Source key> >>> <Target key> >>> <column name="CodigoElementoAsociado"/**> >>> </Target key> >>> <one-to-many class="MyNamespace.**NotasElementos, GIOFACT_DAL"/> >>> </set> >>> >>> >>> ¿Es posible hacer esto? La verdad es que esto solucionaría una gran >>> parte de las necesidades que tengo pendientes. >>> >>> Ni que decir que agradezco enormemente por adelantado cualquier ayuda >>> que pueda recibir. >>> >>> Un saludo. >>> >> -- > 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
