Detached criteria em relação ANY

17 views
Skip to first unread message

Husseyn Hussa

unread,
Jun 30, 2014, 9:14:43 PM6/30/14
to nhiber...@googlegroups.com
Boa noite pessoal!!

Passei o dia batendo cabeça com isso, então se faltar alguma informação ou não for claro, peço desculpas ;)

Conto com vocês!!

preciso gerar a query 2, porém o mais próximo que chego é a query 1.

Onde está o problema:

ICriteria query = session.CreateCriteria<Modelo.Etapa.EtEtapaCobranca>("etapa");
                query.Add(Subqueries.PropertyIn("etapa.Id",
                    DetachedCriteria.For<Modelo.Etapa.EtVinculoEtapa>("vinculo")
********* faz o IN da query 1, que dá erro, é justo                    
.SetProjection(Projections.Property("vinculo.Etapa"))
********* não reconhece a propriedade Id da etapa e dá erro.
.SetProjection(Projections.Property("vinculo.Etapa.Id"))
                        )
                    );



(1)
SELECT this_
.etapaCobrancaId as etapaCob1_35_0_, 
this_.Observacoes as Observac2_35_0_, 
this_.workflowId as workflowId35_0_, 
this_.chamadoId as chamadoId35_0_ 
FROM 
ET_EtapaCobranca this_ 
WHERE 
this_.etapaCobrancaId in 
(SELECT this_0_.tipoEtapa as y0_, this_0_.etapaId as y1_ FROM ET_VinculoEtapa this_0_)

(2)
SELECT this_
.etapaCobrancaId as etapaCob1_35_0_, 
this_.Observacoes as Observac2_35_0_, 
this_.workflowId as workflowId35_0_, 
this_.chamadoId as chamadoId35_0_ 
FROM 
ET_EtapaCobranca this_ 
WHERE 
this_.etapaCobrancaId in 
(SELECT this_0_.etapaId as y1_ FROM ET_VinculoEtapa this_0_ 
where this_0_.tipoEtapa = 'Modelo.Etapa.EtEntidadeCobranca')




Abaixo o mapeamento da classe ET_EtapaCobranca e o da ET_VinculoEtapa

public EtEtapaCobrancaMap()
        {
            Table("ET_EtapaCobranca");
            Id(x => x.Id)
                .Column("etapaCobrancaId");

            References(x => x.Workflow)
                .Column("workflowId");

            References(x => x.Chamado)
                .Column("chamadoId");

            Map(x => x.Observacoes);
        }

public EtVinculoEtapaMap()
        {
            Table("ET_VinculoEtapa");
            Id(x => x.Id)
                .Column("vinculoEtapaId");

            ReferencesAny(x => x.Entidade)
                .EntityTypeColumn("tipoEntidade")
                .EntityIdentifierColumn("entidadeId")
                .IdentityType<Int32>()
                .AddMetaValue<EtEntidadeCobranca>("Modelo.Etapa.EtEntidadeCobranca");

            ReferencesAny(x => x.Etapa)
                .EntityTypeColumn("tipoEtapa")
                .EntityIdentifierColumn("etapaId")
                .IdentityType<Int32>()                
                .MetaType<string>()
                .AddMetaValue<EtEtapaCobranca>("Modelo.Etapa.EtEtapaCobranca");
        }







Alexandre Moraes

unread,
Jul 1, 2014, 8:27:22 AM7/1/14
to nhiber...@googlegroups.com
Olá, bom dia Husseyn,

não escrevo muitos criterias, mas posso te ajudar com queryover, prefiro o uso de queryover pelo uso de lambdas e evitar magic strings.. espero que lhe ajude:

      Modelo.Etapa.EtEtapaCobranca etapaAlias  = null;
      Modelo.Etapa.EtVinculoEtapa vinculoAlias = null;

      var subquery = QueryOver
        .Of(() => vinculoAlias)
        .JoinQueryOver(() => etapaAlias)
        .Select(Projections.Distinct(Projections.Property(() => etapaAlias.Id)));

      IQueryOver query = session
        .QueryOver(() => etapaAlias)
        .WithSubquery.WhereProperty(() => etapaAlias.Id).In(subquery);

Husseyn Hussa

unread,
Jul 1, 2014, 12:55:30 PM7/1/14
to nhiber...@googlegroups.com
Vou testar aqui e já falo!

Valeu!!!


--
Você recebeu essa mensagem porque está inscrito no grupo quot;NHibernate-Br" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para nhibernate-b...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para nhiber...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/nhibernate-br.
Para mais opções, acesse https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages