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.Produto;
abstract class DAOFactory<T> 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;
}
private void populateQueryParameters(Query query, Map<String, Object> parameters) {
for (Entry<String, Object> entry : parameters.entrySet()) {
query.setParameter(entry.getKey(), entry.getValue());
}
}
}
ProdutoDAO
package br.com.unip.menudroidweb.dao;
import br.com.unip.menudroidweb.model.Produto;
public class ProdutoDAO extends DAOFactory<Produto>{
private static final long serialVersionUID = -2176679123609120020L;
public ProdutoDAO() {
super(Produto.class);
}
}
consegui fazer (eu acho) só está dando um erro
alguém sabe me dizer o porque?
ProdutoDAO
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<Produto>{
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);
}
}
DAOFactory
@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());
e.printStackTrace();
}
return result;
}
Produto
@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";
ProdutoFacade
@GET
@Path("/listarporgrupoproduto/{id}")
@Produces("application/json")
public String listarPorGrupoProduto(@PathParam("id") int grupoProdutoId){
produtoDAO.beginTransaction();
ArrayList<Produto> produto = (ArrayList<Produto>) produtoDAO.findProdutoByGrupoProduto(grupoProdutoId);
produtoDAO.closeTransaction();
return new Gson().toJson(produto);
}
Erro
Erro durante a execução da query: Parameter value [1] did not match expected type [br.com.unip.menudroidweb.model.GrupoProduto]
java.lang.IllegalArgumentException: Parameter value [1] did not match expected type [br.com.unip.menudroidweb.model.GrupoProduto]
at org.hibernate.ejb.AbstractQueryImpl.validateParameterBinding(AbstractQueryImpl.java:375)
at org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:348)
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:375)
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:72)
at br.com.unip.menudroidweb.dao.DAOFactory.populateQueryParameters(DAOFactory.java:143)
at br.com.unip.menudroidweb.dao.DAOFactory.findManyResult(DAOFactory.java:125)
at br.com.unip.menudroidweb.dao.ProdutoDAO.findProdutoByGrupoProduto(ProdutoDAO.java:20)
at br.com.unip.menudroidweb.facade.ProdutoFacade.listarPorGrupoProduto(ProdutoFacade.java:93)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1480)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1411)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1360)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1350)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Alguém sabe me dizer que erro é esse?
quando eu tento acessar pelo webservice me da esse erro e retorna null na pagina
query="select p from Produto p where p.grupoProduto = :grupoProduto"
Repare que no hql voce diz: onde a propriedade grupoProduto do Produto for igual a…
Mas a propriedade grupoProduto é do tipo GrupoProduto. Quando voce passa o parametro voce passa um inteiro, ele esta esperando um GrupoProduto mas recebe um inteiro. Mude o seu hql para que espere um inteiro. Ou passe um GrupoProduto por parametro na query.