package cn.newgxu.bbs.domain; import java.util.LinkedHashMap; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import cn.newgxu.bbs.common.Pagination; import cn.newgxu.bbs.common.exception.BBSException; import cn.newgxu.bbs.common.exception.BBSExceptionMessage; import cn.newgxu.bbs.domain.market.Item; import cn.newgxu.jpamodel.JPAEntity; import cn.newgxu.jpamodel.ObjectNotFoundException; /** * * @author polly * @since 4.0.0 * @version $Revision 1.1$ */ @Entity @Table(name = "store_item") public class StoreItem extends JPAEntity { private static final long serialVersionUID = 4622410741322971053L; @Id @Column(name = "id") // @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="id_seq") // @SequenceGenerator(name="id_seq", sequenceName="seq_store_item") @GeneratedValue(strategy = GenerationType.IDENTITY) private int id = -1; @ManyToOne(cascade = { CascadeType.REFRESH }) @JoinColumn(name = "item_id") private Item item; @Column(name = "unit_price") private int unitPrice; private int number; public int getId() { return id; } public void setId(int id) { this.id = id; } public int getUnitPrice() { return unitPrice; } public void setUnitPrice(int unitPrice) { this.unitPrice = unitPrice; } public Item getItem() { return item; } public void setItem(Item item) { this.item = item; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } // ------------------------------------------------ public static StoreItem get(int id) throws ObjectNotFoundException { return (StoreItem) getById(StoreItem.class, id); } public void save() { if (this.number < 0) { super.delete(); } else { super.save(); } } public void addNumber(int number) { this.number += number; this.number = this.number < 0 ? 0 : this.number; } public void sell(int number) throws BBSException { if (this.number < number) { throw new BBSException(BBSExceptionMessage.OUT_OF_STORAGE); } addNumber(-number); } @SuppressWarnings("unchecked") public static List<StoreItem> getStoreItems(Pagination p) { return (List<StoreItem>) Q("from StoreItem i where number>0 order by i.id desc", p).getResultList(); } public static int getNumberOfStoreItems() { try { return ((Long) SQ("select count(*) from StoreItem i where number>0")).intValue(); } catch (ObjectNotFoundException e) { return 0; } } // ------------------------------------------------ @SuppressWarnings("serial") @Override public String toString() { return "store" + new LinkedHashMap<String, Object>() { { put("id", id); put("item", item); put("number", number); } }.toString(); } public static StoreItem getByItemId(int id) throws ObjectNotFoundException{ return (StoreItem) Q("from StoreItem i where i.item.id = ?1 ", P(1, id)).getSingleResult(); } }