Galera, seguinte o amigo meu pego um tutorial do jakefrog aqui do GUJ sobre JSF + Hibernate
estamos fazendo o TCC juntos
agora eu preciso implementar uma busca de produto por grupo de produto
e no material que tenho aqui o código seria assim:
Model
@NamedQueries(value={
@NamedQuery(name="Produto.buscarPorGrupoProduto", query="from Produto where idGrupoProduto = :grupoProduto")
})
public class Produto implements Serializable {
// Codigos
}
DAO (que eu sei fazer, que aprendi uns anos atrás em um curso)
public List<Produto> buscarPorGrupoProduto(int grupoProdutoId) {
Session sessao = HibernateUtil.getSession(); //HibernateUtil
try {
Transaction tx = sessao.beginTransaction();
Query q = sessao.getNamedQuery("Produto.buscarPorGrupoProduto");
q.setString("grupoProduto", grupoProdutoId);
List<Produto> p = q.list();
tx.commit();
return p;
} catch(Exception ex) {
ex.printStackTrace();
return null;
} finally {
if (sessao != null) {
try {
sessao.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
}
Agora como eu faco com essa codificação
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);
}
}
ProdutoFacade
package br.com.unip.menudroidweb.facade;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import br.com.unip.menudroidweb.dao.ProdutoDAO;
import br.com.unip.menudroidweb.model.Produto;
import com.google.gson.Gson;
@Path("/produto")
public class ProdutoFacade implements Serializable {
private static final long serialVersionUID = 7626044516417662074L;
private ProdutoDAO produtoDAO = new ProdutoDAO();
@PUT
@Path("/incluir")
@Produces("application/json")
public void createProduto(Produto produto) {
produtoDAO.beginTransaction();
produtoDAO.save(produto);
produtoDAO.commitAndCloseTransaction();
}
public void updateProduto(Produto produto) {
produtoDAO.beginTransaction();
Produto persistedProduto = produtoDAO.find(produto.getIdProduto());
persistedProduto.setDescricao(produto.getDescricao());
persistedProduto.setGrupoProduto(produto.getGrupoProduto());
persistedProduto.setObservacaoCardapio(produto.getObservacaoCardapio());
persistedProduto.setPrecoCusto(produto.getPrecoCusto());
persistedProduto.setPrecoVenda(produto.getPrecoVenda());
produtoDAO.update(persistedProduto);
produtoDAO.commitAndCloseTransaction();
}
public Produto findProduto(int produtoId) {
produtoDAO.beginTransaction();
Produto produto = produtoDAO.find(produtoId);
produtoDAO.closeTransaction();
return produto;
}
public List<Produto> listAll() {
produtoDAO.beginTransaction();
List<Produto> produto = produtoDAO.findAll();
produtoDAO.closeTransaction();
return produto;
}
public void deleteProduto(Produto produto) {
produtoDAO.beginTransaction();
Produto persistedProduto = produtoDAO.findReferenceOnly(produto.getIdProduto());
produtoDAO.delete(persistedProduto);
produtoDAO.commitAndCloseTransaction();
}
// Metodos WS Android
@GET
@Path("/listar")
@Produces("application/json")
public String listarTodosAndroid() {
produtoDAO.beginTransaction();
ArrayList<Produto> produto = (ArrayList<Produto>) produtoDAO.findAll();
produtoDAO.closeTransaction();
return new Gson().toJson(produto);
}
@GET
@Path("/listar/{id}")
@Produces("application/json")
public String findProdutoAndroid(@PathParam("id") int produtoId) {
produtoDAO.beginTransaction();
Produto produto = produtoDAO.find(produtoId);
produtoDAO.closeTransaction();
return new Gson().toJson(produto);
}
}
