Roberto, yo trataría de hacerlo con Criteria. Ya que justamente para el caso
que mencionas es mas recomendado usar criteria, en vez de construir la query
dinamicamente.
http://groups.google.com/group/nhibernate-hispano/browse_thread/thread/2ca46eefac311517/fbae60c68ca0f7fa?lnk=gst&q=hql+criteria#fbae60c68ca0f7fa

Recuerda que en nhibernate hay para elegir formas de hacer una consulta:
http://fabiomaulo.blogspot.com/2009/09/nhibernate-queries.html


El 12 de octubre de 2009 18:10, roberto <[email protected]> escribió:

>
> 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