package com.hongqiang.shop.modules.user.dao; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import javax.persistence.FlushModeType; import javax.persistence.NoResultException; import org.springframework.stereotype.Repository; import com.hongqiang.shop.common.base.persistence.BaseDaoImpl; import com.hongqiang.shop.common.base.persistence.Page; import com.hongqiang.shop.common.utils.Filter; import com.hongqiang.shop.common.utils.Order; import com.hongqiang.shop.common.utils.Pageable; import com.hongqiang.shop.modules.entity.MemberRank; import com.hongqiang.shop.modules.entity.Product; @Repository public class MemberRankDaoImpl extends BaseDaoImpl<MemberRank,Long> implements MemberRankDaoCustom { @Override public boolean nameExists(String name) { if (name == null) return false; String str = "select count(*) from MemberRank memberRank where lower(memberRank.name) = lower(:name)"; Long localLong = (Long) this.getEntityManager() .createQuery(str, Long.class) .setFlushMode(FlushModeType.COMMIT).setParameter("name", name) .getSingleResult(); return localLong.longValue() > 0L; } @Override public boolean amountExists(BigDecimal amount) { if (amount == null) return false; String str = "select count(*) from MemberRank memberRank where memberRank.amount = :amount"; Long localLong = (Long) this.getEntityManager() .createQuery(str, Long.class) .setFlushMode(FlushModeType.COMMIT) .setParameter("amount", amount).getSingleResult(); return localLong.longValue() > 0L; } @Override public MemberRank findDefault() { try { String str = "select memberRank from MemberRank memberRank where memberRank.isDefault = true"; return (MemberRank) this.getEntityManager() .createQuery(str, MemberRank.class) .setFlushMode(FlushModeType.COMMIT).getSingleResult(); } catch (NoResultException localNoResultException) { } return null; } @Override public MemberRank findByAmount(BigDecimal amount) { if (amount == null) return null; String str = "select memberRank from MemberRank memberRank "+ "where memberRank.isSpecial = false and "+ " memberRank.amount <= :amount order by memberRank.amount desc"; return (MemberRank) this.getEntityManager() .createQuery(str, MemberRank.class) .setFlushMode(FlushModeType.COMMIT) .setParameter("amount", amount).setMaxResults(1) .getSingleResult(); } @Override public Page<MemberRank> findPage(Pageable pageable) { String sqlString = "select memberRank from MemberRank memberRank where 1=1 "; List<Object> parameter = new ArrayList<Object>(); return super.findPage(sqlString, parameter, pageable); } @Override public List<MemberRank> findList(Integer first, Integer count, List<Filter> filters, List<Order> orders) { String qlString = "select memberRank from MemberRank memberRank where 1=1 "; List<Object> parameter = new ArrayList<Object>(); return super.findList(qlString, parameter, first, count, filters, orders); } @Override public List<MemberRank> findAll() { return findList(null, null, null, null); } @Override public void persist(MemberRank memberRank) { if (memberRank.getIsDefault().booleanValue()) { String str = "update MemberRank memberRank set memberRank.isDefault = false where memberRank.isDefault = true"; this.getEntityManager().createQuery(str) .setFlushMode(FlushModeType.COMMIT).executeUpdate(); } System.out.println("get here."); super.persist(memberRank); } @Override public MemberRank merge(MemberRank memberRank) { if (memberRank.getIsDefault().booleanValue()) { String str = "update MemberRank memberRank set memberRank.isDefault = false "+ "where memberRank.isDefault = true and memberRank != :memberRank"; this.getEntityManager().createQuery(str) .setFlushMode(FlushModeType.COMMIT) .setParameter("memberRank", memberRank).executeUpdate(); } return (MemberRank) super.merge(memberRank); } @Override public void remove(MemberRank memberRank) { if ((memberRank != null) && (!memberRank.getIsDefault().booleanValue())) { String str = "select product from Product product join product.memberPrice memberPrice "+ "where index(memberPrice) = :memberRank"; List<Product> localList = this.getEntityManager() .createQuery(str, Product.class) .setFlushMode(FlushModeType.COMMIT) .setParameter("memberRank", memberRank).getResultList(); for (int i = 0; i < localList.size(); i++) { Product localProduct = (Product) localList.get(i); localProduct.getMemberPrice().remove(memberRank); if (i % 20 != 0) continue; super.flush(); super.clear(); } super.remove((MemberRank) super.merge(memberRank)); } } }