createNativeQuery com new em um objeto [RESOLVIDO]

6 respostas
G

Bom dia.

Gostaria de saber se há uma maneira de criar um sql no hibernate via NativeQuery, já passando um new em um objeto.

Ficaria mais ou menos assim:

Query q = em.createNativeQuery("SELECT org.sped.registro0000.Registro0150( U.ABREVIATURA, U.NOME) FROM UNIDADE as U "
                    + "inner join prodserv as p on p.unidade = u.codigo_unidade "
                    + "left join nfeentradaprodserv as nfp on nfp.prodserv = p.codigo_produto "
                    + "left join prodservfaturado as pf on pf.codigo_prodserv = p.codigo_produto "
                    + "left join vendacondicionalitens as vi on vi.prod_serv = p.codigo_produto  "
                    + "and vi.prod_serv not in (pf.codigo_prodserv) "
                    + "left join notafiscalentrada as nf on nf.codigo_nf_entrada = nfp.nfeentrada "
                    + "left join vendacondicional as v on v.cod_venda_cond = vi.venda "
                    + "where nfp.prodserv is not null or pf.codigo_prodserv is not null or vi.prod_serv is not null "
                    + "and nf.dataemissao between '01-11-2012' and '11-11-2012' "
                    + "and v.data_emissao between '01-11-2012' and '11-11-2012' "
                    + "group by U.ABREVIATURA, U.NOME ");
            q.setMaxResults(10);
            return q.getResultList();

Obrigado

6 Respostas

J

Desconheço, porque quando usa SQLNative no hibernate ele retorna uma lista de Object, sendo assim tendo que setar para cada atributo no objeto.
Se eu te entendi correto!

G

jtiagoarruda:
Desconheço, porque quando usa SQLNative no hibernate ele retorna uma lista de Object, sendo assim tendo que setar para cada atributo no objeto.
Se eu te entendi correto!

Isso mesmo, para não ter que percorrer a lista inteira de objetos, eu gostaria de achar uma forma que me ajudasse nisso, para tornar o processo mais rápido!

Obrigado

H

gilvanandre:
jtiagoarruda:
Desconheço, porque quando usa SQLNative no hibernate ele retorna uma lista de Object, sendo assim tendo que setar para cada atributo no objeto.
Se eu te entendi correto!

Isso mesmo, para não ter que percorrer a lista inteira de objetos, eu gostaria de achar uma forma que me ajudasse nisso, para tornar o processo mais rápido!

Obrigado

Aqui mostra como fazer: JPA Consultas e Dicas.

G

Hebert Coelho:
gilvanandre:
jtiagoarruda:
Desconheço, porque quando usa SQLNative no hibernate ele retorna uma lista de Object, sendo assim tendo que setar para cada atributo no objeto.
Se eu te entendi correto!

Isso mesmo, para não ter que percorrer a lista inteira de objetos, eu gostaria de achar uma forma que me ajudasse nisso, para tornar o processo mais rápido!

Obrigado

Aqui mostra como fazer: JPA Consultas e Dicas.

Não me serve, pois meu objeto não é uma entidade!

H

gilvanandre:
Hebert Coelho:
gilvanandre:
jtiagoarruda:
Desconheço, porque quando usa SQLNative no hibernate ele retorna uma lista de Object, sendo assim tendo que setar para cada atributo no objeto.
Se eu te entendi correto!

Isso mesmo, para não ter que percorrer a lista inteira de objetos, eu gostaria de achar uma forma que me ajudasse nisso, para tornar o processo mais rápido!

Obrigado

Aqui mostra como fazer: JPA Consultas e Dicas.

Não me serve, pois meu objeto não é uma entidade!

Se vc olhar lá, tem exemplo sem ser entidade…

G

Show de bola galera… consegui resolver dessa maneira!

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();
        }
    }

VLW

Criado 21 de dezembro de 2012
Ultima resposta 21 de dez. de 2012
Respostas 6
Participantes 3