Galera,
Estou com um problema estranho em uma namedquery que fiz.
Quando tento passar um parametro para ela tenho o seguinte erro:
[color=red]Parameter value [3] did not match expected type [br.com.unip.menudroidweb.model.GrupoProduto][/color]
A linha que da erro é a seguinte:
Estou setando o parametro da seguinte maneira:
Já debuguei o código aqui e ele está mandando corretamente o valor do idGrupoProduto.
Alguém saberia porque esse está ocorrendo??
Abaixo deixo as classes para referência.
Produto.java
[code]package br.com.unip.menudroidweb.model;
import java.io.Serializable;
import java.math.BigDecimal;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;
@Entity
@Table(name = “produto”)
@XmlRootElement
@NamedQueries(value={
@NamedQuery(name=“Produto.buscarPorGrupoProduto”, query=“select p from Produto p where p.grupoProduto = :grupoProduto”)
})
public class Produto implements Serializable {
private static final long serialVersionUID = 8836023087332514952L;
public static final String PROCURAR_POR_GRUPO_PRODUTO = "Produto.buscarPorGrupoProduto";
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(unique = true, nullable = false)
private int idProduto;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "idGrupoProduto")
private GrupoProduto grupoProduto;
@Column(nullable = false, length = 150)
private String descricao;
@Column(nullable = true, length = 300)
private String observacaoCardapio;
@Column(nullable = false, precision = 10, scale = 2)
private BigDecimal precoCusto;
@Column(nullable = false, precision = 10, scale = 2)
private BigDecimal precoVenda;
public int getIdProduto() {
return this.idProduto;
}
public void setIdProduto(int idProduto) {
this.idProduto = idProduto;
}
public String getDescricao() {
return this.descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public String getObservacaoCardapio() {
return this.observacaoCardapio;
}
public void setObservacaoCardapio(String observacaoCardapio) {
this.observacaoCardapio = observacaoCardapio;
}
public BigDecimal getPrecoCusto() {
return this.precoCusto;
}
public void setPrecoCusto(BigDecimal precoCusto) {
this.precoCusto = precoCusto;
}
public BigDecimal getPrecoVenda() {
return this.precoVenda;
}
public void setPrecoVenda(BigDecimal precoVenda) {
this.precoVenda = precoVenda;
}
public GrupoProduto getGrupoProduto() {
if (grupoProduto == null) {
grupoProduto = new GrupoProduto();
}
return grupoProduto;
}
public void setGrupoProduto(GrupoProduto grupoProduto) {
this.grupoProduto = grupoProduto;
}
}[/code]
ProdutoDAO.java
[code]package br.com.unip.menudroidweb.dao;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import br.com.unip.menudroidweb.model.Produto;
public class ProdutoDAO extends DAOFactory{
private static final long serialVersionUID = -2176679123609120020L;
public ProdutoDAO() {
super(Produto.class);
}
public List<Produto> findProdutoByGrupoProduto(int idGrupoProduto){
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("grupoProduto", idGrupoProduto);
return super.findManyResult(Produto.PROCURAR_POR_GRUPO_PRODUTO, parameters);
}
}
[/code]
DAOFactory.java
[code]package br.com.unip.menudroidweb.dao;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.NoResultException;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaQuery;
import br.com.unip.menudroidweb.model.GrupoProduto;
abstract class DAOFactory implements Serializable {
private static final long serialVersionUID = 1L;
private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("menudroidweb");
private EntityManager em;
private Class<T> entityClass;
public void beginTransaction() {
em = emf.createEntityManager();
em.getTransaction().begin();
}
public void commit() {
em.getTransaction().commit();
}
public void rollback() {
em.getTransaction().rollback();
}
public void closeTransaction() {
em.close();
}
public void commitAndCloseTransaction() {
commit();
closeTransaction();
}
public void flush() {
em.flush();
}
public void joinTransaction() {
em = emf.createEntityManager();
em.joinTransaction();
}
public DAOFactory(Class<T> entityClass) {
this.entityClass = entityClass;
}
public void save(T entity) {
em.persist(entity);
}
public void delete(T entity) {
T entityToBeRemoved = em.merge(entity);
em.remove(entityToBeRemoved);
}
public T update(T entity) {
return em.merge(entity);
}
public T find(int entityID) {
return em.find(entityClass, entityID);
}
public T findReferenceOnly(int entityID) {
return em.getReference(entityClass, entityID);
}
// Using the unchecked because JPA does not have a
// em.getCriteriaBuilder().createQuery()<T> method
@SuppressWarnings({ "unchecked", "rawtypes" })
public List<T> findAll() {
CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
return em.createQuery(cq).getResultList();
}
// Using the unchecked because JPA does not have a
// query.getSingleResult()<T> method
@SuppressWarnings("unchecked")
protected T findOneResult(String namedQuery, Map<String, Object> parameters) {
T result = null;
try {
Query query = em.createNamedQuery(namedQuery);
// Method that will populate parameters if they are passed not null and empty
if (parameters != null && !parameters.isEmpty()) {
populateQueryParameters(query, parameters);
}
result = (T) query.getSingleResult();
} catch (NoResultException e) {
System.out.println("Nenhum resultado retornado pela query: " + namedQuery);
} catch (Exception e) {
System.out.println("Erro durante a execução da query: " + e.getMessage());
e.printStackTrace();
}
return result;
}
@SuppressWarnings("unchecked")
protected List<T> findManyResult(String namedQuery, Map<String, Object> parameters){
List<T> result = null;
try{
Query query = em.createNamedQuery(namedQuery);
if (parameters != null && !parameters.isEmpty()) {
populateQueryParameters(query, parameters);
}
result = query.getResultList();
} catch (NoResultException e) {
System.out.println("Nenhum resultado retornado pela query: " + namedQuery);
} catch (Exception e) {
System.out.println("Erro durante a execução da query: " + e.getMessage() + "\n" + namedQuery);
e.printStackTrace();
}
return result;
}
private void populateQueryParameters(Query query, Map<String, Object> parameters) {
for (Entry<String, Object> entry : parameters.entrySet()) {
query.setParameter(entry.getKey(), entry.getValue());
}
}
}[/code]
Agradeço desde já por qualquer ajuda.