package com.sap.hana.cloud.samples.benefits.persistence; import java.util.Collection; import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.persistence.NonUniqueResultException; import javax.persistence.Query; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.sap.hana.cloud.samples.benefits.persistence.manager.EntityManagerProvider; import com.sap.hana.cloud.samples.benefits.persistence.model.BenefitInfo; import com.sap.hana.cloud.samples.benefits.persistence.model.BenefitType; @SuppressWarnings("nls") public class BenefitDAO extends BasicDAO<BenefitInfo> { private final Logger logger = LoggerFactory.getLogger(BenefitDAO.class); public BenefitDAO() { super(EntityManagerProvider.getInstance()); } @Override public BenefitInfo save(BenefitInfo benefitInfo) { BenefitInfo existingBenefit = getByName(benefitInfo.getName()); if (existingBenefit == null) { saveNew(benefitInfo); return benefitInfo; } final BenefitTypeDAO benefitTypeDAO = new BenefitTypeDAO(); final Collection<BenefitType> types = benefitInfo.getTypes(); for (BenefitType benefitType : types) { benefitType.setBenefitInfo(existingBenefit); benefitTypeDAO.saveNew(benefitType); } return existingBenefit; } private BenefitInfo getByName(String name) { BenefitInfo benefitInfo = null; final EntityManager em = emProvider.get(); try { final Query query = em.createQuery("select b from BenefitInfo b where b.name = :name"); query.setParameter("name", name); benefitInfo = (BenefitInfo) query.getSingleResult(); } catch (NoResultException e) { logger.warn("Could not retrieve entity {} from table {}. Maybe the benefit info doesn't exist yet.", name, "Benefits info"); } catch (NonUniqueResultException e) { throw new IllegalStateException(String.format("More than one entity %s from table Benefits info.", name)); //$NON-NLS-1$ } return benefitInfo; } }