Que mas Danilo, Verificando en tu mapeo te sugiero lo siguiente:
- SI estas usanando una relacion inversa *inverse=true* debes tener una relacion bidireccional donde el hijo referencie a su padre por medio de una relacion <many-to-one>. - Si no necesitas esta relacion bidireccional entonces puedes tranquilamente quitar el *inverse=true* - Remueve la propiedad *MenIdPadre*. - A menos que tengas porblemas de inconsistencia de datos o sea una Base de Datos legacy utiliza not-found="ignore" sino remuevelo. - En tu consulta te estas trayendo unicamente los padres que esta activos pero al recorrer sus hijos vas a tener TODOs los hijos. Sin embargo al quitar la restriccion de que la propiedad *MenIdPadre* sea null vas a obtener TODOS los menus activos independiente de la jerarquía. - Te sugiero que modifiques tu consulta a algo como "select m from Menu m left join m.MenuPadre p where m.Estado = 'Activo' and (p is null or p.Estado = 'Activo')" . De esta manera te vas a traer NO solo todos los que esten activos sino que ademas aquellos donde sus padres tambien esten activos. - Por ultimo, en caso de que no estes generando el esquema de la BD desde NH entonces utiliza un validador de esquema. Cuentanos como te va. Saludos Nestor Rodriguez 2010/10/1 Danilo Rueda <[email protected]> > Cordiales Saludos, > > Soy nuevo en Nhibernate y puede ser que lo que pregunte sea más > sencillo de lo que creo. > Tengo una tabla recursiva para almacenar unos menus que pueden tener > hijos y los hijos su vez más hijos. > Cuando traigo los menus padres quiero que traiga los hijos y asi > sucvesivamente. (Esto lo hago bien y me funciona) pero cuando intento > colocar filtros o criterios solamente me afectan a los menus padres y > no afecta los BAG o conjuntos de hijos. > Eh intentado crear alias para filtrar los hijos pero no obtengo los > resultados que quiero. > Si alguien me puede ayudar, le agradecería mucho. Dejo el códido, el > mapeo y la clase. > > Para mi es importante que las restricciones se efectuen como en > cascada (si se puede aplicar) porque solamente debería tyrae los > menus padres Activos y sus hijos Activos, pero lo que realmente hace > es traer los padres activos pero los hijos activos e inactivos y esto > aplica para otros criterios. > > Gracias > > Este es mi Codigo: > > Dim listaMenu As IList(Of SegMenu) > Dim miCriterio As NHibernate.ICriteria > miCriterio = SesionDb.Session.CreateCriteria(Of SegMenu)() > > With miCriterio > .Add(Restrictions.Eq("Estado", "Activo")) > .Add(Restrictions.Eq("TipoMenu", "Horizontal")) > .Add(Restrictions.IsNull("MenIdPadre")) > .AddOrder(Order.Asc("Orden")) > End With > > listaMenu = miCriterio.List(Of SegMenu)() > > Mi Mapeo: > <?xml version="1.0" encoding="utf-8" ?> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" > assembly="WcfSuifp" namespace="WcfSuifp.Suifp.Persistencia.Seguridad"> > <class name="SegMenu" lazy="false"> > <id name="MenId" column="MenId" type ="decimal" unsaved-value="0"> > <generator class="identity"/> > </id> > <property name="MenIdPadre" type="decimal" not-null="false" /> > ... > <bag name="SubMenu" table="SegMenu" inverse="true" lazy ="false" > > <key column="MenIdPadre" /> > <one-to-many class="SegMenu" not-found="ignore" /> > </bag> > > </class> > </hibernate-mapping> > y mi clase > Namespace Suifp.Persistencia.Seguridad > <DataContract()> _ > Public Class SegMenu > #Region "Declaraciones" > > Private menIdValor As Nullable(Of Decimal) > Private menIdPadreValor As Nullable(Of Decimal) > ... > Private subMenuValor As IList(Of SegMenu) > > #End Region > #Region "Propiedades" > <DataMember()> _ > Public Property MenId() As Nullable(Of Decimal) > Get > Return menIdValor > End Get > Set(ByVal value As Nullable(Of Decimal)) > menIdValor = value > End Set > End Property > <DataMember()> _ > Public Property MenIdPadre() As Nullable(Of Decimal) > Get > Return menIdPadreValor > End Get > Set(ByVal value As Nullable(Of Decimal)) > menIdPadreValor = value > End Set > End Property > ''' > <DataMember()> _ > Public Property SubMenu() As IList(Of SegMenu) > Get > Return subMenuValor > End Get > Set(ByVal value As IList(Of SegMenu)) > subMenuValor = value > End Set > End Property > > #End Region > > > Nuevamente Gracias > > D.R. > > -- > 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
