JPAAuctionItemDAO.java

  1. package ejava.examples.asyncmarket.jpa;

  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Map;

  5. import javax.persistence.EntityManager;
  6. import javax.persistence.Query;

  7. import ejava.examples.asyncmarket.bo.AuctionItem;
  8. import ejava.examples.asyncmarket.bo.Bid;
  9. import ejava.examples.asyncmarket.dao.AuctionItemDAO;

  10. public class JPAAuctionItemDAO implements AuctionItemDAO {
  11.     private EntityManager em;
  12.    
  13.     public void setEntityManager(EntityManager em) {
  14.         this.em = em;
  15.     }

  16.     public AuctionItem getItem(long itemId) {
  17.         return em.find(AuctionItem.class, itemId);
  18.     }

  19.     public AuctionItem createItem(AuctionItem item) {
  20.         em.persist(item);
  21.         return item;
  22.     }
  23.    
  24.     public AuctionItem updateItem(AuctionItem item) {
  25.         return em.merge(item);
  26.     }

  27.     @SuppressWarnings("unchecked")
  28.     public List<AuctionItem> getItems(int index, int count) {
  29.         Query query = em.createNamedQuery("AsyncMarket_getAuctionItems")
  30.                         .setFirstResult(index)
  31.                         .setMaxResults(count);
  32.         return query.getResultList();
  33.     }
  34.    
  35.     @SuppressWarnings("unchecked")
  36.     public List<AuctionItem> getAvailableItems(int index, int count) {
  37.         Query query = em.createNamedQuery("AsyncMarket_getAvailableAuctionItems")
  38.                         .setFirstResult(index)
  39.                         .setMaxResults(count);
  40.         return query.getResultList();
  41.     }
  42.    
  43.     @SuppressWarnings("unchecked")
  44.     public List<AuctionItem> getItems(
  45.             String queryString, Map<String, Object> params,
  46.             int index, int count) {
  47.         Query query = em.createNamedQuery(queryString)
  48.                         .setFirstResult(index)
  49.                         .setMaxResults(count);
  50.         if (params != null && params.size() != 0) {
  51.             for (String name: params.keySet()) {
  52.                 query.setParameter(name, params.get(name));
  53.             }
  54.         }
  55.         return query.getResultList();
  56.     }

  57.     public void removeItem(long id) {
  58.         AuctionItem item = getItem(id);
  59.         //create a copy to prevent iterating over changing collection
  60.         List<Bid> bids = new ArrayList<Bid>(item.getBids());
  61.         for (Bid bid : bids) {
  62.             bid.getBidder().getBids().remove(bid);
  63.             item.getBids().remove(bid);
  64.             em.remove(bid);
  65.         }
  66.         item.getOwner().getItems().remove(item);
  67.         em.createQuery("delete from Order o " +
  68.                 "where o.item.id = :itemId")
  69.           .setParameter("itemId", id)
  70.           .executeUpdate();
  71.         em.remove(item);
  72.     }

  73.     public Bid getBid(long bidId) {
  74.         return em.find(Bid.class, bidId);
  75.     }

  76.     public void removeBid(Bid bid) {
  77.         bid.getBidder().getBids().remove(bid);
  78.         bid.getItem().getBids().remove(bid);
  79.         em.remove(bid);
  80.     }
  81. }