[Resolvido] Dúvida namedquery

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.

Parameter value [3] did not match expected type [br.com.unip.menudroidweb.model.GrupoProduto]

Cara… pelo erro…
parece que o parametro esperado é um objeto do tipo GrupoProduto e não o id dele…

Então, mas o que eu faria nesse caso?
Instancio um objeto GrupoProduto e passo ele?

De onde vem esse idGrupoProduto?
posta a view dessa parte ai…

Cara, consegui aqui! Fiz o seguinte:

GrupoProdutoFacade gProd = new GrupoProdutoFacade(); GrupoProduto grupo = gProd.findGrupoProduto(idGrupoProduto);

e passei

blza…
então…
vc pode fazer isto passando o id da view pro bean e fazendo uma busca pelo id, depois passando o objeto ou
passando o objeto direto da view pro bean usando um entityConverter, e buscando direto pelo objeto…
d buenas…

ou…
marca o tópico como resolvido pro povo não ficar entrando a toa…

Pronto!

Valeu pela ajuda amigo!