package es.com.blogspot.elblogdepicodev.tapestry.jpa.dao; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.Query; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; import es.com.blogspot.elblogdepicodev.tapestry.jpa.entities.Producto; import es.com.blogspot.elblogdepicodev.tapestry.jpa.misc.Pagination; public class ProductoDAOImpl implements ProductoDAO { private EntityManager entityManager; public ProductoDAOImpl(EntityManager entityManager) { this.entityManager = entityManager; } @Override public Producto findById(Long id) { return entityManager.find(Producto.class, id); } @Override public List<Producto> findAll(Pagination paginacion) { CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<Producto> cq = cb.createQuery(Producto.class); Root<Producto> root = cq.from(Producto.class); cq.select(root); if (paginacion != null) { cq.orderBy(paginacion.getOrders(root, cb)); } Query q = entityManager.createQuery(cq); if (paginacion != null) { q.setFirstResult(paginacion.getStart()); q.setMaxResults(paginacion.getEnd() - paginacion.getStart() + 1); } return q.getResultList(); } @Override public void persist(Producto producto) { entityManager.persist(producto); } @Override public void remove(Producto producto) { entityManager.remove(producto); } @Override public void removeAll() { Query query = entityManager.createQuery("delete from Producto"); query.executeUpdate(); } }