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