1
resposta

JPA - SqlResultMapping sem Entity, é possível ?

Estou procurando formas de fazer fazer cast sem a necessidade ficar formatando o objeto na mão.Vi que com o @@SqlResultSetMapping é possível fazer . Porém no meu caso eu querendo fazer uma consulta de uma FUNCTION porém só obtenho o erro " Unknown entity: "

@SqlResultSetMapping(name = "mappingBasePdvCadastrado", classes = {
        @ConstructorResult(columns = { @ColumnResult(name = "status_cp_chip", type = String.class),
                @ColumnResult(name = "status_cp_combo", type = String.class),
                @ColumnResult(name = "status_cp_rec", type = String.class),
        }, targetClass = ProcBasePdv.class) })
public class ProcBasePdv {

    private String status_cp_chip;
    private String status_cp_combo;
    private String status_cp_rec;

    public ProcBasePdv(String status_cp_chip, String status_cp_combo, String status_cp_rec) {
        super();
        this.status_cp_chip = status_cp_chip;
        this.status_cp_combo = status_cp_combo;
        this.status_cp_rec = status_cp_rec;
    }

    public ProcBasePdv() {
    }


public void testa() {

        String query = 
                "select "
                + "status_cp_chip "
                + "status_cp_combo "
                + "status_cp_rec "
                + "from TABLE("
                + "PACK_EXP_ESTOQUE.FNC_EXP_ESTQ_COMPL"
                + "(NULL,'32,34,37,35,36,39,38,40,41','DF',NULL,NULL,NULL,NULL,NULL)) "
                + "WHERE "
                + "(FG_ATIVO_COMBO = 'Ativo' OR FG_ATIVO_CHIP = 'Ativo' or FG_ATIVO_CHIP = 'Ativo')";

        Query nativeQuery = em.createNativeQuery(query,"mappingBasePdvCadastrado");

        nativeQuery.setMaxResults(10);

        List<ProcBasePdv> lista = nativeQuery.getResultList();

        for (ProcBasePdv procBasePdv : lista) {
            System.out.println(procBasePdv);
        }






    }
1 resposta

Fala Luiz, tudo bom?

Eu não cheguei a usar o SqlResultSetMapping. Porém lembro que eu conseguia fazer isso simplesmente passando entity como parametro para o em.

Algo como: em.createNativeQuery(query, ProcBasePdv.class);

Ai no resultado seria legal vc colocar o casting explicito:

List lista = (ProcBasePdv) nativeQuery.getResultList();

Para isso funcionar não se esqueça de colocar o @Entity na classe.

Faça um teste! ;)

Att,