Quantidade de registros difere [RESOLVIDO]

Boa tarde

Criei um SQL direto no Postger, o mesmo me retorna 18 registros nesse período que eu coloco
Segue sql do postgre:

select distinct(p.codigo_pessoa) COD_PART, p.nome_razao NOME, ps.codigo_ibge COD_PAIS, p.cpf_cnpj CNPJ,
p.cpf_cnpj CPF, p.insc_estadual IE, c.codigo_ibge COD_MUN, p.inscricao_suframa SUFRAMA,
en.logradouro as END, en.numero NUM, en.complemento COMPL, en.bairro BAIRRO  from pessoa p
inner join nfexml nx on nx.pcliente = p.codigo_pessoa
left join endereco en on en.codigo_endereco = p.endereco_padrao
left join cidade c on c.codigo_cidade = en.cidade
left join pais ps on ps.codigo_pais = c.codigo_pais
where nx.demi between '1/11/2012' and '10/11/2012'
order by 1, 2;

Fazendo o mesmo SQL no HQL, ajustando o mesmo para ele, me retorna apenas 13 registros!
Segue o sql no hibernate:

    public List<Registro0150> pessoaByNFeXmlPeriodo(java.sql.Date di, java.sql.Date df) {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select distinct "
                    + "new org.sped.registro0000.Registro0150( "
                    + "cast(p.codigo_pessoa as string), "
                    + "p.nome_razao, "
                    + "p.endereco_padrao.cidade.pais.codigo_ibge, "
                    + "p.cpf_cnpj, " // TODO
                    + "p.cpf_cnpj, " // TODO
                    + "p.insc_estadual, "
                    + "p.endereco_padrao.cidade.codigo_ibge, "
                    + "p.inscricaoSuframa, "
                    + "p.endereco_padrao.logradouro, "
                    + "p.endereco_padrao.numero, "
                    + "p.endereco_padrao.complemento, "
                    + "p.endereco_padrao.bairro ) "
                    + "from Pessoa as p, NFeXML as n "
                    + "left join p.endereco_padrao as nd "
                    + "left join nd.cidade as c "
                    + "left join c.pais "
                    + "where n.demi between :di and :df "
                    + "and n.pCliente = p.codigo_pessoa "
                    );
            q.setParameter("di", di);
            q.setParameter("df", df);
            return q.getResultList();
        } finally {
            em.close();
        }
    }

Alguém sabe como posso ajustar isso?
Há uma maneira de utilizar ‘inner join’ no HQL?

Obrigado

na sua hql não tem uma condição a mais no where?

[quote=fabiozanardi]na sua hql não tem uma condição a mais no where?

Ai que ta… eu não preciso dessa condição a mais se funcionasse como eu queria. Pois a função do inner join é com que não seja necessário ter essa condição!
:smiley:

Resolvi o problema utilizando o metodo nativo!

Segue um dos códigos utilizados abaixo:

    public List<Registro0200> itemPeriodo(java.sql.Date di, java.sql.Date df) {
        EntityManager em = getEntityManager();
        try {

            Properties params = new Properties();
            params.put("enumClass", "org.sped.utils.TipoItemEnum");
            params.put("type", "12");
            Session session = (Session) em.getDelegate();
            org.hibernate.Query q = session.createSQLQuery("(select distinct(cast (p.codigo_produto as varchar)) as COD_ITEM, p.nome AS DESCR_ITEM, "
                    + "'' AS COD_BARRA, '' as COD_ANT_ITEM, u.abreviatura as unid_inv,  "
                    + "'MercadoriaRevenda' as tipo_item, '385656' as COD_NCM, '' as EX_IPI, '' as COD_GEN,"
                    + "'' as COD_LST, 0 as aliq_icms from prodserv p "
                    + "inner join prodservfaturado pf on pf.codigo_prodserv = p.codigo_produto "
                    + "left join nfexml nx on nx.codigo_xml  = pf.codigo_nfexml "
                    + "left join unidade u on u.codigo_unidade = p.unidade "
                    + "where nx.demi between :di and :df "
                    + "and pf.situacao = true) "
                    + "union "
                    + "(select distinct(cast (p.codigo_produto as varchar)) as COD_ITEM, p.nome AS DESCR_ITEM, "
                    + "'' AS COD_BARRA, '' as COD_ANT_ITEM, u.abreviatura as unid_inv,  "
                    + "'MercadoriaRevenda' as tipo_item, '385656' as COD_NCM, '' as EX_IPI, '' as COD_GEN,"
                    + "'' as COD_LST, 0 as aliq_icms from prodserv p "
                    + "inner join vendacondicionalitens vi on vi.prod_serv = p.codigo_produto "
                    + "left join vendacondicional v on v.cod_venda_cond = vi.venda "
                    + "left join prodservfaturado pf on pf.codigo_prodserv = p.codigo_produto "
                    + "left join unidade u on u.codigo_unidade = p.unidade "
                    + "where v.data_emissao between :di and :df "
                    + "and p.codigo_produto not in (pf.codigo_prodserv) "
                    + "and vi.situacao = true and vi.cupom = true) "
                    + "union "
                    + "(select distinct(cast (p.codigo_produto as varchar)) as COD_ITEM, p.nome AS DESCR_ITEM, "
                    + "'' AS COD_BARRA, '' as COD_ANT_ITEM, u.abreviatura as unid_inv,  "
                    + "'MercadoriaRevenda' as tipo_item, '385656' as COD_NCM, '' as EX_IPI, '' as COD_GEN,"
                    + "'' as COD_LST, 0 as aliq_icms from prodserv p "
                    + "inner join nfeentradaprodserv nfp on nfp.prodserv = p.codigo_produto "
                    + "left join notafiscalentrada n on n.codigo_nf_entrada = nfp.nfeentrada "
                    + "left join unidade u on u.codigo_unidade = p.unidade "
                    + "where n.dataemissao between :di and :df "
                    + "and nfp.situacao = true )")
                    .addScalar("tipo_item", Hibernate.custom(org.hibernate.type.EnumType.class, params))
                    .addScalar("aliq_icms", Hibernate.DOUBLE)
                    .setResultTransformer(Transformers.aliasToBean(Registro0200.class));
            q.setParameter("di", di);
            q.setParameter("df", df);

            return q.list();
        } finally {
            em.close();
        }
    }