package br.com.dirley.financas.teste;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import br.com.dirley.financas.modelo.Movimentacao;
import br.com.dirley.financas.modelo.Categoria;
import br.com.dirley.financas.util.JPAUtil;
public class TesteJPQLMovCat {
public static void main(String[] args) {
EntityManager em = new JPAUtil().getEntityManager();
em.getTransaction().begin();
@SuppressWarnings("deprecation")
Categoria categoria = new Categoria();
categoria.setId(1);
String jpql = "select m from Movimentacao m join m.categorias c where c.categorias = :pCategoria";
Query query = em.createQuery(jpql);
query.setParameter("pCategoria", categoria);
@SuppressWarnings("unchecked")
List<Movimentacao> resultados = query.getResultList();
for (Movimentacao movimentacao : resultados) {
System.out.println("Descrição: "+movimentacao.getDescricao());
System.out.println("Conta: "+movimentacao.getConta().getTitular());
}
em.getTransaction().commit();
em.close();
}
}
package br.com.dirley.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;
import br.com.dirley.financas.util.TipoMovimentacao;
@Entity
public class Movimentacao {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private BigDecimal valor;
@Enumerated(EnumType.STRING)
private TipoMovimentacao tipo;
private String descricao;
@Temporal(TemporalType.TIMESTAMP)
private Calendar data;
@ManyToOne
private Conta conta;
@ManyToMany
private List<Categoria> categorias;
public List<Categoria> getCategorias() {
return categorias;
}
public void setCategorias(List<Categoria> categorias) {
this.categorias = categorias;
}
public Integer getId() {
return 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 String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public Calendar getData() {
return data;
}
public void setData(Calendar data) {
this.data = data;
}
public Conta getConta() {
return conta;
}
public void setConta(Conta conta) {
this.conta = conta;
}
public void setId(Integer id) {
this.id = id;
}
}
package br.com.dirley.financas.modelo;
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id;
@Entity public class Categoria {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String nome;
@Deprecated
public Categoria() {
}
public Categoria(String nome) {
this.nome = nome;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
Não consigo encontrar onde está errado. Pode me ajudar?
`
Segue o erro:
Exception in thread "main" java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property: categorias of: br.com.dirley.financas.modelo.Categoria [select m from br.com.dirley.financas.modelo.Movimentacao m join m.categorias c where c.categorias = :pCategoria]
br.com.dirley.financas.teste.TesteJPQLMovCat.main(TesteJPQLMovCat.java:22)
Caused by: org.hibernate.QueryException: could not resolve property: categorias of: br.com.dirley.financas.modelo.Categoria [select m from br.com.dirley.financas.modelo.Movimentacao m join m.categorias c where c.categorias = :pCategoria]