bueno.... Creo que *yo* la ultima opción para hacer consultas ni la
intentaría! :P

El 12 de octubre de 2009 21:08, José F. Romaniello
<[email protected]>escribió:

> 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