And I do not want using FetchMode becausse in some cases the NH generates the inner correctly, but in others they generates left outer with same configuration.
2010/4/14 Diego Dias <[email protected]> > This is code that generates the Criteria: > > public static PagedList<E> Paginate<E>(this PaginationFor<E> pagination, > ICriteria criteria) > where E : class, IEntity > { > if (criteria == null) > { throw new ArgumentNullException("A criteria deve ser > passada!"); } > > //Limitar o numero de resultados > SetMaxResults<E>(pagination, criteria); > > // adicionar os filtros, para limitar a pesquisa > SetFilters<E>(pagination, criteria); > > // adicionar a ordenação, para os resultados > AddOrders<E>(pagination, criteria); > > //obter a contagem de registros > int count = GetCount(criteria); > > var list = criteria.List(); > > // obter os resultados > IList<E> entitiesList = list.Cast<E>().ToList(); > > // caso existam, retirar a referencia a coleções supérfluas > if (pagination.Filters.Length > 0) > { > entitiesList = > entitiesList.LoadWithout<E>(pagination.Filters); > } > // retornar a coleção pronta > return new PagedList<E>(entitiesList, count); > } > > public static void SetMaxResults<E>(PaginationFor<E> pagination, > ICriteria criteria) > where E : class, IEntity > { > //caso for enviado o tamanho zero, significa que a query > //deve retornar todos os registros, segundo os filtros > if (pagination.PageSize == 0) { return; } > > criteria > .SetMaxResults(pagination.PageSize) > .SetFirstResult(pagination.PageIndex * > pagination.PageSize); > } > > public static void AddOrders<E>(PaginationFor<E> pagination, > ICriteria criteria) > where E : class, IEntity > { > pagination.Orders.Foreach( > co => { > criteria.AddOrder( > new Order(criteria.CreatePath(co), co.Value)); > }); > } > > And to generates the filter of the criteria we are using a object as: > > public class filter{ > public string property{get;set;} > > public object value{get;set;} > > public Operation operation {get;set;} being that Operation is a > Enun like the operations: Equals, NotEquals, Like... > } > > All very very simple. > > 2010/4/14 Diego Mijelshon <[email protected]> > >> Indeed >> >> Diego >> >> >> >> On Wed, Apr 14, 2010 at 11:06, Richard Wilde <[email protected]>wrote: >> >>> I suspect Diego wants to see the code (hql, linq etc) that you use to >>> generate the code, not the SQL itself... >>> >>> >>> >>> Many Thanks >>> Richard >>> >>> >>> >>> *From:* [email protected] [mailto:[email protected]] *On >>> Behalf Of *Diego Dias >>> *Sent:* 14 April 2010 14:55 >>> *To:* [email protected] >>> *Subject:* Re: [nhusers] Mapping Nhibernate >>> >>> >>> >>> In previous messages, but here too: >>> >>> >>> >>> SELECT this_.IdMatricula as IdMatric1_122_14_, >>> this_.IdTurma as IdTurma122_14_, >>> this_.IdUsuario as IdUsuario122_14_, >>> turma3_.IdTurma as IdTurma25_0_, >>> turma3_.idTurmaStatus as idTurmaS2_25_0_, >>> turma3_.IdCurso as IdCurso25_0_, >>> curso4_.IdCurso as IdCurso31_1_, >>> curso4_.idStatus as idStatus31_1_, >>> curso4_.IdTipoCurso as IdTipoC10_31_1_, >>> curso4_.IdOrganization as IdOrgan11_31_1_, >>> statuscurs5_.idStatus as idStatus54_2_, >>> statuscurs5_.strStatus as strStatus54_2_, >>> tipocurso6_.strDescricao as strDescr2_125_3_, >>> padraocomu7_.strNmPadrao as strNmPad2_103_4_, >>> organizati8_.Id_Organization as Id1_87_5_, >>> organizati8_.strTitle as strTitle87_5_, >>> cursoprese9_.IdCurso as IdCurso6_6_, >>> turmastatu10_.idTurmaStatus as idTurmaS1_91_7_, >>> usuario1_.IdUsuario as IdUsuario116_10_, >>> organizaca14_.idOrganizacao as idOrgani1_83_11_, >>> cargo15_.idCargo as idCargo7_12_, >>> matriculas16_.idMatriculaStatus as idMatric1_15_13_ >>> FROM tracking.matriculas this_ >>> inner join cursos.turmas turma3_ on >>> this_.IdTurma=turma3_.IdTurma >>> left outer join schemadbo.cursos curso4_ on >>> turma3_.IdCurso=curso4_.IdCurso >>> left outer join schemadbo.status statuscurs5_ on >>> curso4_.idStatus=statuscurs5_.idStatus >>> left outer join schemadbo.tipos tipocurso6_ on >>> curso4_.IdTipoCurso=tipocurso6_.IdTipoCurso >>> left outer join schemadbo.PadraoComunicacao padraocomu7_ on >>> curso4_.IdPadraoComunicacao=padraocomu7_.IdPadrao >>> left outer join schemadbo.lms_cp_organizations organizati8_ on >>> curso4_.IdOrganization=organizati8_.Id_Organization >>> left outer join schemadbo.CursosPresenciais cursoprese9_ on >>> curso4_.IdCurso=cursoprese9_.IdCurso >>> left outer join schemadbo.turmasstatus turmastatu10_ on >>> turma3_.idTurmaStatus=turmastatu10_.idTurmaStatus >>> left outer join schemadbo.turmaspresenciais turmaprese11_ on >>> turma3_.IdTurma=turmaprese11_.idTurma >>> inner join schemadbo.matriculasresumo matricular12_ on >>> this_.IdMatricula=matricular12_.IdMatricula >>> inner join schemadbo.usuarios usuario1_ on >>> this_.IdUsuario=usuario1_.IdUsuario >>> left outer join schemadbo.Organizacoes organizaca14_ on >>> usuario1_.idOrganizacao=organizaca14_.idOrganizacao >>> left outer join schemadbo.cargos cargo15_ on >>> usuario1_.idCargo=cargo15_.idCargo >>> inner join schemadbo.matriculasstatus matriculas16_ on >>> this_.idMatriculaStatus=matriculas16_.idMatriculaStatus >>> WHERE this_.IdTurma = @p0 >>> >>> 2010/4/14 Diego Mijelshon <[email protected]> >>> >>> Where's the code that generates the query? >>> >>> Diego >>> >>> On Wed, Apr 14, 2010 at 10:49, Diego Dias <[email protected]> >>> wrote: >>> >>> Someone? >>> >>> 2010/4/13 Diego Dias <[email protected]> >>> >>> >>> >>> Hi, guys. >>> >>> I'm with a problem with the query that NHibernate generates. My >>> mapping is like bellow and I'm using ActiveRecord to do mapping: >>> >>> public class Matricula >>> { >>> [BelongsTo("IdTurma", NotNull=True)] >>> public Turma {get;set;} >>> } >>> >>> public class Turma >>> { >>> [BelongsTo("IdCurso", NotNull=True)] >>> public Curso {get;set;} >>> } >>> >>> public class Curso >>> { >>> [PrimaryKey("IdCurso", Generator=PrimaryKeyType.Identity)] >>> public int IdCurso{get;set;} >>> } >>> >>> The problem is: The Nh generates the query with left where should be >>> inner. Between Matricula and Turma they makes inner, but between Turma >>> and Curso they makes left outer. What's problem? What's wrong? >>> >>> My query: >>> >>> SELECT this_.IdMatricula as IdMatric1_122_14_, >>> this_.IdTurma as IdTurma122_14_, >>> this_.IdUsuario as IdUsuario122_14_, >>> turma3_.IdTurma as IdTurma25_0_, >>> turma3_.idTurmaStatus as idTurmaS2_25_0_, >>> turma3_.IdCurso as IdCurso25_0_, >>> curso4_.IdCurso as IdCurso31_1_, >>> curso4_.idStatus as idStatus31_1_, >>> curso4_.IdTipoCurso as IdTipoC10_31_1_, >>> curso4_.IdOrganization as IdOrgan11_31_1_, >>> statuscurs5_.idStatus as idStatus54_2_, >>> statuscurs5_.strStatus as strStatus54_2_, >>> tipocurso6_.strDescricao as strDescr2_125_3_, >>> padraocomu7_.strNmPadrao as strNmPad2_103_4_, >>> organizati8_.Id_Organization as Id1_87_5_, >>> organizati8_.strTitle as strTitle87_5_, >>> cursoprese9_.IdCurso as IdCurso6_6_, >>> turmastatu10_.idTurmaStatus as idTurmaS1_91_7_, >>> usuario1_.IdUsuario as IdUsuario116_10_, >>> organizaca14_.idOrganizacao as idOrgani1_83_11_, >>> cargo15_.idCargo as idCargo7_12_, >>> matriculas16_.idMatriculaStatus as idMatric1_15_13_ >>> FROM tracking.matriculas this_ >>> inner join cursos.turmas turma3_ on >>> this_.IdTurma=turma3_.IdTurma >>> left outer join schemadbo.cursos curso4_ on >>> turma3_.IdCurso=curso4_.IdCurso >>> left outer join schemadbo.status statuscurs5_ on >>> curso4_.idStatus=statuscurs5_.idStatus >>> left outer join schemadbo.tipos tipocurso6_ on >>> curso4_.IdTipoCurso=tipocurso6_.IdTipoCurso >>> left outer join schemadbo.PadraoComunicacao padraocomu7_ on >>> curso4_.IdPadraoComunicacao=padraocomu7_.IdPadrao >>> left outer join schemadbo.lms_cp_organizations organizati8_ on >>> curso4_.IdOrganization=organizati8_.Id_Organization >>> left outer join schemadbo.CursosPresenciais cursoprese9_ on >>> curso4_.IdCurso=cursoprese9_.IdCurso >>> left outer join schemadbo.turmasstatus turmastatu10_ on >>> turma3_.idTurmaStatus=turmastatu10_.idTurmaStatus >>> left outer join schemadbo.turmaspresenciais turmaprese11_ on >>> turma3_.IdTurma=turmaprese11_.idTurma >>> inner join schemadbo.matriculasresumo matricular12_ on >>> this_.IdMatricula=matricular12_.IdMatricula >>> inner join schemadbo.usuarios usuario1_ on >>> this_.IdUsuario=usuario1_.IdUsuario >>> left outer join schemadbo.Organizacoes organizaca14_ on >>> usuario1_.idOrganizacao=organizaca14_.idOrganizacao >>> left outer join schemadbo.cargos cargo15_ on >>> usuario1_.idCargo=cargo15_.idCargo >>> inner join schemadbo.matriculasstatus matriculas16_ on >>> this_.idMatriculaStatus=matriculas16_.idMatriculaStatus >>> WHERE this_.IdTurma = @p0 >>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "nhusers" group. >>> To post to this group, send email to [email protected]. >>> To unsubscribe from this group, send email to >>> [email protected]<nhusers%[email protected]> >>> . >>> For more options, visit this group at >>> http://groups.google.com/group/nhusers?hl=en. >>> >>> >>> >>> -- >>> >>> You received this message because you are subscribed to the Google Groups >>> "nhusers" group. >>> To post to this group, send email to [email protected]. >>> To unsubscribe from this group, send email to >>> [email protected]<nhusers%[email protected]> >>> . >>> For more options, visit this group at >>> http://groups.google.com/group/nhusers?hl=en. >>> >>> >>> >>> -- >>> >>> You received this message because you are subscribed to the Google Groups >>> "nhusers" group. >>> To post to this group, send email to [email protected]. >>> To unsubscribe from this group, send email to >>> [email protected]<nhusers%[email protected]> >>> . >>> For more options, visit this group at >>> http://groups.google.com/group/nhusers?hl=en. >>> >>> >>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "nhusers" group. >>> To post to this group, send email to [email protected]. >>> To unsubscribe from this group, send email to >>> [email protected]<nhusers%[email protected]> >>> . >>> For more options, visit this group at >>> http://groups.google.com/group/nhusers?hl=en. >>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "nhusers" group. >>> To post to this group, send email to [email protected]. >>> To unsubscribe from this group, send email to >>> [email protected]<nhusers%[email protected]> >>> . >>> For more options, visit this group at >>> http://groups.google.com/group/nhusers?hl=en. >>> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "nhusers" group. >> To post to this group, send email to [email protected]. >> To unsubscribe from this group, send email to >> [email protected]<nhusers%[email protected]> >> . >> For more options, visit this group at >> http://groups.google.com/group/nhusers?hl=en. >> > > -- You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/nhusers?hl=en.
