package com.hongqiang.shop.modules.shipping.dao; 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.Pageable; import com.hongqiang.shop.modules.entity.Member; import com.hongqiang.shop.modules.entity.Receiver; @Repository public class ReceiverDaoImpl extends BaseDaoImpl<Receiver,Long> implements ReceiverDaoCustom { public Receiver findDefault(Member member) { if (member == null) return null; try { String str1 = "select receiver from Receiver receiver where receiver.member = :member and receiver.isDefault = true"; return (Receiver) this.getEntityManager() .createQuery(str1, Receiver.class) .setFlushMode(FlushModeType.COMMIT) .setParameter("member", member).getSingleResult(); } catch (NoResultException localNoResultException2) { try { String str2 = "select receiver from Receiver receiver where receiver.member = :member order by receiver.updateDate desc"; return (Receiver) this.getEntityManager() .createQuery(str2, Receiver.class) .setFlushMode(FlushModeType.COMMIT) .setParameter("member", member).setMaxResults(1) .getSingleResult(); } catch (NoResultException localNoResultException3) { } } return null; } public Page<Receiver> findPage(Member member, Pageable pageable) { String sqlString = "select receiver from Receiver receiver where 1=1 "; List<Object> params = new ArrayList<Object>(); if (member != null) { sqlString += " and receiver.member = ? "; params.add(member); } return super.findPage(sqlString, params, pageable); } public void persist(Receiver receiver) { if (receiver == null || receiver.getMember() == null) { return; } if (receiver.getIsDefault().booleanValue()) { String str = "update Receiver receiver set receiver.isDefault = false "+ "where receiver.member = :member and receiver.isDefault = true"; this.getEntityManager().createQuery(str) .setFlushMode(FlushModeType.COMMIT) .setParameter("member", receiver.getMember()) .executeUpdate(); } super.persist(receiver); } public Receiver merge(Receiver receiver) { if (receiver == null || receiver.getMember() == null) { return null; } if (receiver.getIsDefault().booleanValue()) { String str = "update Receiver receiver set receiver.isDefault = false "+ "where receiver.member = :member and receiver.isDefault = true and receiver != :receiver"; this.getEntityManager().createQuery(str) .setFlushMode(FlushModeType.COMMIT) .setParameter("member", receiver.getMember()) .setParameter("receiver", receiver).executeUpdate(); } return (Receiver) super.merge(receiver); } }