/** * */ package org.inbio.m3s.dao.atta.impl; import java.util.List; import org.apache.log4j.Logger; import org.hibernate.Query; import org.hibernate.Session; import org.inbio.m3s.dao.GenericBaseDAOImpl; import org.inbio.m3s.dao.core.SpecimenDAO; import org.inbio.m3s.model.general.Specimen; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.HibernateTemplate; /** * @author jgutierrez * */ public class INBioSpecimenDAOImpl extends GenericBaseDAOImpl<Specimen, Integer> implements SpecimenDAO { private static Logger logger = Logger.getLogger(INBioSpecimenDAOImpl.class); /* * (non-Javadoc) * @see org.inbio.m3s.dao.core.SpecimenDAO#findByGatheringNumberAndGatheringPersonId(java.lang.Integer, java.lang.Integer) */ @SuppressWarnings("unchecked") public List<Specimen> findByGatheringNumberAndGatheringPersonId(final Integer gatheringPersonId, final Integer gatheringNumber) throws IllegalArgumentException { logger.debug("findByGatheringNumberAndGatheringPersonId... gatheringPersonId["+gatheringPersonId+"] and gatheringNumber["+gatheringNumber+"]"); HibernateTemplate template = getHibernateTemplate(); return (List<Specimen>) template.execute(new HibernateCallback() { public Object doInHibernate(Session session) { /** * The gathering number min and max is a stupid and wired way of make a * query where the s.gatheringNumber = gatheringNumber, because when I * do that hibernate doesn't return anything */ Integer gatheringNumberMin = gatheringNumber - 1; Integer gatheringNumberMax = gatheringNumber + 1; Query query = session.createQuery("select s from INBioSpecimen as s " + " where s.gatheringDetailPersonId = " + gatheringPersonId + " and s.gatheringNumber > " + gatheringNumberMin + " and s.gatheringNumber < " + gatheringNumberMax); query.setCacheable(false); return query.list(); } }); } }