Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro ao criar Group BY no JPA

Bom dia, Pessoal.

Tenho o seguinte código abaixo, só que fica emitindo um erro quando executa o metodo listar do controller, alguém saberia me dizer o que estou fazendo errado.

O Erro que ocorre é esse abaixo.

Request processing failed; nested exception is java.lang.IllegalArgumentException: Cannot create TypedQuery for query with more than one return using requested result type

Model Produto

@Entity
public class Produto {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @ManyToOne
    private TipoCategoria categoria;

    private String descricao;
    private BigDecimal valor;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public TipoCategoria getTipoCategoria() {
        return categoria;
    }

    public void setTipoCategoria(TipoCategoria categoria) {
        this.categoria = categoria;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public BigDecimal getValor() {
        return valor;
    }

    public void setValor(BigDecimal valor) {
        this.valor = valor;
    }
}

Model TipoCategoria

@Entity
public class TipoCategoria {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    private String descricao;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }
}

Controller

public List<Produto> listar() {
        // TODO Auto-generated method stub

        return  manager.createQuery("Select p.descricao, tipoCategoria,  SUM(p.valor) as valor From Produto p"
                + " join p.categoria tipoCategoria" 
                + " Group By p.descricao, tipoCategoria",Produto.class).getResultList();
    }
2 respostas
solução!

Bom Dia Marcos, tudo bem com você?

A questão é que neste caso você não está retornando um objeto do tipo Produto, por isso ele acusa um erro for query with more than one return using requested result type

Além disso, a sua Query esta trazendo 3 resultados ( descricao, tipoCategoria, e a soma) ao invés de um único, neste caso precisaríamos definir o tipo mais genérico possível para que funcione, no caso um Object

Aqui no 3º capitulo do curso de JPA o instrutor explica uma outra ideia que se encaixa bem no que você quer fazer, que é projetar uma classe com esses dados, de forma que a gente faça uma query construtora :)

Abraços e Bons Estuods!

Bom dia, Geovani.

Grato pelo retorno.

Ontem acabei fazendo uma solução criando um novo objeto com as características do retorno que eu preciso, ai funcionou. Não sei se é o melhor caminho a seguir mas no meu caso funcionou.

Dei uma olhada no curso que vc indicou e vi que tem algo q eu preciso mesmo, Depois vou ver esse curso, grato pela indicação.