JPAAuctionItemDAO.java
- package ejava.examples.asyncmarket.jpa;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import javax.persistence.EntityManager;
- import javax.persistence.Query;
- import ejava.examples.asyncmarket.bo.AuctionItem;
- import ejava.examples.asyncmarket.bo.Bid;
- import ejava.examples.asyncmarket.dao.AuctionItemDAO;
- public class JPAAuctionItemDAO implements AuctionItemDAO {
- private EntityManager em;
-
- public void setEntityManager(EntityManager em) {
- this.em = em;
- }
- public AuctionItem getItem(long itemId) {
- return em.find(AuctionItem.class, itemId);
- }
- public AuctionItem createItem(AuctionItem item) {
- em.persist(item);
- return item;
- }
-
- public AuctionItem updateItem(AuctionItem item) {
- return em.merge(item);
- }
- @SuppressWarnings("unchecked")
- public List<AuctionItem> getItems(int index, int count) {
- Query query = em.createNamedQuery("AsyncMarket_getAuctionItems")
- .setFirstResult(index)
- .setMaxResults(count);
- return query.getResultList();
- }
-
- @SuppressWarnings("unchecked")
- public List<AuctionItem> getAvailableItems(int index, int count) {
- Query query = em.createNamedQuery("AsyncMarket_getAvailableAuctionItems")
- .setFirstResult(index)
- .setMaxResults(count);
- return query.getResultList();
- }
-
- @SuppressWarnings("unchecked")
- public List<AuctionItem> getItems(
- String queryString, Map<String, Object> params,
- int index, int count) {
- Query query = em.createNamedQuery(queryString)
- .setFirstResult(index)
- .setMaxResults(count);
- if (params != null && params.size() != 0) {
- for (String name: params.keySet()) {
- query.setParameter(name, params.get(name));
- }
- }
- return query.getResultList();
- }
- public void removeItem(long id) {
- AuctionItem item = getItem(id);
- //create a copy to prevent iterating over changing collection
- List<Bid> bids = new ArrayList<Bid>(item.getBids());
- for (Bid bid : bids) {
- bid.getBidder().getBids().remove(bid);
- item.getBids().remove(bid);
- em.remove(bid);
- }
- item.getOwner().getItems().remove(item);
- em.createQuery("delete from Order o " +
- "where o.item.id = :itemId")
- .setParameter("itemId", id)
- .executeUpdate();
- em.remove(item);
- }
- public Bid getBid(long bidId) {
- return em.find(Bid.class, bidId);
- }
- public void removeBid(Bid bid) {
- bid.getBidder().getBids().remove(bid);
- bid.getItem().getBids().remove(bid);
- em.remove(bid);
- }
- }