Bueno, pues muchas gracias... hasta ahora pude resolver mi problema,
mientras analizo otras opciones de la siguiente manera, aunque la
verdad no estoy muy convencido: conociendo la instancia de mi entidad
pude leer el metadata del mapping a través de GetClassMetadata() y
simplemente hice una exclusión a todos aquellas propiedades que fueran
diferentes a "NHibernate.Type.ComponentType" solución demasiado
rústica =(

Saludos...

On 9 oct, 15:22, Fabio Maulo <[email protected]> wrote:
> Bueno... ahora estas usando el parser viejo que puede tener comportamientos
> distintos respecto a lo de 1.2.1.Lo que "lamentablemente" te queda es sacar
> ese "left join fetch"...
> Aprovecho para aclarar algo:
> Hay varios casos, y no son pocos, donde un "left join fetch" o un "join
> fetch" tiene menores prestaciones de un nuevo round-trip con una select.
> Eso de poner algo que contruya HQL, con string concatenation, que le pone
> un "left join fetch", así de forma general sin importar el caso de uso
> especifico y solo porque hay una relación, no es tan buena idea. Desde
> NH2.0.0 se puede usar MultiQuery para levantar todas las asociaciones de un
> solo round-trip en lugar de usar "join fetch".
>
> Mas que esto me parece que no puedo... por lo menos en la lista...
> conociendo el caso especifico sería distinto.
>
> El 9 de octubre de 2009 18:35, roberto <[email protected]> escribió:
>
>
>
>
>
>
>
> > Voy de nuevo... intente cortar la cabeza al toro, pero algo raro me
> > sucedio. Muestro mi configuración:
>
> > cfg = new NHibernate.Cfg.Configuration();
> > cfg.Properties.Add(NHibernate.Cfg.Environment.ConnectionProvider,
> > "NHibernate.Connection.DriverConnectionProvider");
> > cfg.Properties.Add
> > (NHibernate.Cfg.Environment.CurrentSessionContextClass, "web");
> > cfg.Properties.Add(NHibernate.Cfg.Environment.ConnectionDriver,
> > "NHibernate.Driver.SqlClientDriver");
> > cfg.Properties.Add(NHibernate.Cfg.Environment.Dialect,
> > "NHibernate.Dialect.MsSql2008Dialect");
> > cfg.Properties.Add(NHibernate.Cfg.Environment.MaxFetchDepth, "-1");
> > cfg.Properties.Add
> > (NHibernate.Cfg.Environment.ProxyFactoryFactoryClass,
> > "NHibernate.ByteCode.Castle.ProxyFactoryFactory,
> > NHibernate.ByteCode.Castle");
> > cfg.Properties.Add(NHibernate.Cfg.Environment.UseSecondLevelCache,
> > "false");
> > cfg.Properties.Add(NHibernate.Cfg.Environment.UseQueryCache, "false");
> > cfg.Properties.Add(NHibernate.Cfg.Environment.ShowSql, "false");
> > cfg.Properties.Add(NHibernate.Cfg.Environment.BatchSize, "16");
> > cfg.Properties.Add(NHibernate.Cfg.Environment.DefaultSchema, "dbo");
> > cfg.Properties.Add(NHibernate.Cfg.Environment.GenerateStatistics,
> > "true");
>
> > cfg.Properties.Add(NHibernate.Cfg.Environment.QueryTranslator,
> > "NHibernate.Hql.Classic.ClassicQueryTranslatorFactory, NHibernate ");
>
> > Ahora en "teoria" realiza correcto el parseo, y aunque ya no me
> > devuelve una excepción el hql si me arroja un array vacio...
>
> > Algo estaré haciendo mal? estoy usando la variable de forma correcta?
>
> > Saludos, y gracias por la ayuda.
>
> > On 9 oct, 13:05, roberto <[email protected]> wrote:
> > > Perfecto... analizo las dos opciones que me dá... muchas gracias, me
> > > quedo ya mas tranquilo =)
>
> > > Saludos...
>
> > > On 9 oct, 13:02, Fabio Maulo <[email protected]> wrote:
>
> > > > ah otra cosa...Si queres cortar la cabeza al toro es suficiente con
> > esto:
> > > > <property name ="query.factory_class">
> > > > NHibernate.Hql.Classic.ClassicQueryTranslatorFactory, NHibernate
> > > > </property>
>
> > > > El 9 de octubre de 2009 17:01, Fabio Maulo <[email protected]>
> > escribió:
>
> > > > > no tiene sentido "left join fetch obj.InformacionGenerica".Si generas
> > las
> > > > > HQL a run-time deberias hacer lo mismo que hace NH generando SQL.
> > > > > Cuando escribis "obj.InformacionGenerica.CodigoPersona.Clave" NH se
> > da
> > > > > cuenta y se fija en los metadata para conocer las relaciones, con eso
> > > > > construye los joins necesarios para llegar a la propiedad "Clave" que
> > está
> > > > > tres niveles mas abajo.
>
> > > > > Si queres generar HQL dinamicas deberías hacer lo mismo o, even
> > better,
> > > > > generar Criteria y no HQL.
>
> > > > > El 9 de octubre de 2009 16:56, roberto <[email protected]>
> > escribió:
>
> > > > >> Si entiendo el punto, una vez que contamos con la información del
> > > > >> component en la misma tabla... en otro órden de ideas, ¿lo que me
> > > > >> intenta decir es que esta nueva versión lo identifica como error?
>
> > > > >> Yo lo hago asi debido a que al hql que esta viendo se crea en
> > runtime,
> > > > >> identifica la propiedad InformacionGenerica en la clase como objeto
> > > > >> (aunque en el mapping nosotros sabemos que es un Component) y
> > > > >> agregandolo a la clausula from como nested object...
>
> > > > >> Pedí ayuda debido a que en la versión 1.2 de NH me permitia
> > hacerlo...
> > > > >> =)
>
> > > > >> On 9 oct, 12:49, Fabio Maulo <[email protected]> wrote:
> > > > >> > preguta...Que sentido tiene un "left join" o un "join" con un
> > component
> > > > >> ?
>
> > > > >> > El 9 de octubre de 2009 16:06, roberto <[email protected]>
> > > > >> escribió:
>
> > > > >> > > Hola a todos...
>
> > > > >> > > Me preguntaba si alguno de ustedes se habia topado con el
> > siguiente
> > > > >> > > error:
>
> > > > >> > > Justo acabo de migrar de la versión 1.2 a 2.1 de NH y dentro de
> > todo
> > > > >> > > funciono bien, excepto por un hql query el cual involucra un
> > Component
> > > > >> > > en el mapping...
>
> > > > >> > > Agrego mi mapping:
>
> > > > >> > > <?xml version="1.0" encoding="utf-8" ?>
> > > > >> > > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
> > > > >> > >  <class name="Core.Moneda, Core" table="tblMonedas"
> > lazy="false">
> > > > >> > >    <id name="Id" column="id" type="int" unsaved-value="0">
> > > > >> > >      <generator class="identity" />
> > > > >> > >    </id>
> > > > >> > >    <property name="Clave" column="clave" type="int" />
> > > > >> > >    <property name="Nombre" column="nombre" type="string" />
> > > > >> > >    <many-to-one name="TipoMoneda" column="tipoMoneda"
> > > > >> > > class="Core.TipoMoneda, Core" cascade="none" />
> > > > >> > >    <property name="GenSubCuenta" column="subCuenta"
> > type="string" />
> > > > >> > >    <component name="InformacionGenerica"
> > > > >> > > class="Core.InformacionGenerica, Core">
> > > > >> > >      <property name="Alta" column="alta" />
> > > > >> > >      <property name="Cambio" column="cambio" />
> > > > >> > >      <property name="Baja" column="baja" />
> > > > >> > >      <property name="Comentario" column="comentarios" />
> > > > >> > >      <many-to-one name="CodigoPersona" class="Core.Usuario,
> > Core"
> > > > >> > > column="codigoUsuario" />
> > > > >> > >    </component>
> > > > >> > >  </class>
>
> > > > >> > > Mi HQL:
>
> > > > >> > > select obj from Moneda as obj left join fetch obj.TipoMoneda
> > left join
> > > > >> > > fetch obj.InformacionGenerica where  obj.Clave like 'pesos' or
> > > > >> > > obj.Nombre like '%pesos%' or obj.TipoMoneda.Nombre like
> > '%pesos%' or
> > > > >> > > obj.GenSubCuenta like '%pesos%' or
> > obj.InformacionGenerica.Comentario
> > > > >> > > like '%pesos%' or obj.InformacionGenerica.Alta like '%pesos%' or
> > > > >> > > obj.InformacionGenerica.Cambio like '%pesos%' or
> > > > >> > > obj.InformacionGenerica.Baja like '%pesos%' or
> > > > >> > > obj.InformacionGenerica.CodigoPersona.Clave like 'pesos' or
> > > > >> > > obj.InformacionGenerica.CodigoPersona.Nombre like '%pesos%'
>
> > > > >> > > Finalmente la excepción:
>
> > > > >> > >   en NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.CreateFromJoinElement
> > > > >> > > (IASTNode path, IASTNode alias, Int32 joinType, IASTNode
> > fetchNode,
> > > > >> > > IASTNode propertyFetch, IASTNode with)
> > > > >> > >   en NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.joinElement()
> > > > >> > >   en NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.fromElement()
> > > > >> > >   en NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.fromElementList()
> > > > >> > >   en NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.fromClause()
> > > > >> > >   en NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.unionedQuery()
> > > > >> > >   en NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.query()
> > > > >> > >   en NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.selectStatement()
> > > > >> > >   en NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.statement()
> > > > >> > >   en NHibernate.Hql.Ast.ANTLR.HqlSqlTranslator.Translate()
> > > > >> > >   en NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.Analyze
> > > > >> > > (HqlParseEngine parser, String collectionRole)
> > > > >> > >   en NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.DoCompile
> > > > >> > > (IDictionary`2 replacements, Boolean shallow, String
> > collectionRole)
> > > > >> > >   en NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.Compile
> > > > >> > > (IDictionary`2 replacements, Boolean shallow)
> > > > >> > >   en NHibernate.Engine.Query.HQLQueryPlan..ctor(String hql,
> > String
> > > > >> > > collectionRole, Boolean shallow, IDictionary`2 enabledFilters,
> > > > >> > > ISessionFactoryImplementor factory)...
>
> > > > >> > > Estuve leyendo un thead en los foros de Hibernate con el mismo
> > > > >> > > problema:
>
> >http://opensource.atlassian.com/projects/hibernate/browse/HHH-1895?pa.
> > > > >> ..
> > > > >> > > pero comentan que es un unsupported feature, no se si para NH
> > suceda
> > > > >> > > lo mismo...
>
> > > > >> > > Agradezco mucho su ayuda...
>
> > > > >> > > Saludos desde México.
>
> > > > >> > --
> > > > >> > Fabio Maulo
>
> > > > > --
> > > > > Fabio Maulo
>
> > > > --
> > > > Fabio Maulo
>
> --
> 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
-~----------~----~----~----~------~----~------~--~---

Responder a