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

JPQL - java.lang.IllegalArgumentException

Pessoal,

Estou com seguinte exceção na consulta do código abaixo. É o mesmo código da aula, porém, infelizmente o professor, embora domine o assunto, não é muito bom em ensinar (é o curso com menor nota, de todos que fiz). Poderiam analisar? Obrigado.

could not resolve property: categoria of: br.com.conde.financas.modelo.Movimentacao [select m from br.com.conde.financas.modelo.Movimentacao m join m.categoria c where c = :pCategoria]

public class TesteMovimentacoesPorCategoria {

    public static void main(String[] args) {

        EntityManager em = new JPAUtil().getEntityManager();
        em.getTransaction().begin();

        @SuppressWarnings("deprecation")
        Categoria categoria = new Categoria();
        categoria.setId(2);

        String jpql = "select m from Movimentacao m join m.categoria c where c = :pCategoria";

        Query query = em.createQuery(jpql);
        query.setParameter("pCategoria", categoria);

        @SuppressWarnings("unchecked")
        List<Movimentacao> resultado = query.getResultList();

        for (Movimentacao movimentacao : resultado) {
            System.out.println(movimentacao.getDescricao());
            System.out.println(movimentacao.getConta().getId());
        }

        em.getTransaction().commit();
        em.close();

    }

}
4 respostas

Bom dia Marcondes, cola sua classe Movimentacao por favor?

Olá Guilherme, vlw pela análise. Segue a classe:

package br.com.conde.financas.modelo;

import java.math.BigDecimal;
import java.util.Calendar;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class Movimentacao {

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

    private BigDecimal valor;

    @Enumerated(EnumType.STRING)
    private TipoMovimentacao tipo;

    @Temporal(TemporalType.TIMESTAMP)
    private Calendar data;

    private  String descricao;

    @ManyToOne
    private Conta conta;

    @ManyToMany
    private List<Categoria> categorias;

    public String getDescricao() {
        return descricao;
    }

    public List<Categoria> getCategorias() {
        return categorias;
    }

    public void setCategorias(List<Categoria> categorias) {
        this.categorias = categorias;
    }

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

    public Conta getConta() {
        return conta;
    }

    public void setConta(Conta conta) {
        this.conta = conta;
    }

    public Integer getId() {
        return id;
    }

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

    public BigDecimal getValor() {
        return valor;
    }

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

    public TipoMovimentacao getTipo() {
        return tipo;
    }

    public void setTipo(TipoMovimentacao tipo) {
        this.tipo = tipo;
    }

    public Calendar getData() {
        return data;
    }

    public void setData(Calendar data) {
        this.data = data;
    }    

}
solução!

Na jpql vocês está passando pra fazer um join em categoria porém o atributo que está referênciando essa lista de categoria na sua classe de movimentação é categorias, dá uma observada melhor nos atributos e na jpql

Acertou em cheio Michael. Obrigado pela análise!