JPAOrderDAO.java

package ejava.examples.asyncmarket.jpa;

import java.util.List;
import java.util.Map;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import ejava.examples.asyncmarket.bo.Order;
import ejava.examples.asyncmarket.dao.OrderDAO;

public class JPAOrderDAO implements OrderDAO {
    private EntityManager em;

    public void setEntityManager(EntityManager em) {
        this.em = em;
    }

    public Order createOrder(Order order) {
        em.persist(order);
        return order;
    }

    public Order getOrder(long orderId) {
        return em.find(Order.class, orderId);
    }

    @SuppressWarnings("unchecked")
    public List<Order> getOrdersforItem(long itemId, int index, int count) {
        return em.createNamedQuery("AsyncMarket_getOrdersForItem")
                        .setParameter("itemId", itemId)
                        .setFirstResult(index)
                        .setMaxResults(count)
                        .getResultList();
    }

    @SuppressWarnings("unchecked")
    public List<Order> getOrders(int index, int count) {
        return em.createNamedQuery("AsyncMarket_getOrders")
                 .getResultList();
    }

    public Order updateOrder(Order order) {
        return em.merge(order);
    }

    @SuppressWarnings("unchecked")
    public List<Order> getOrders(
        String queryString, Map<String, Object> params, int index, int count) {
        Query query = em.createQuery(queryString)
                        .setFirstResult(index)
                        .setMaxResults(count);
        if (params != null) {
            for (String name: params.keySet()) {
                query.setParameter(name, params.get(name));
            }
        }
        return query.getResultList();
    }
}