package pl.net.bluesoft.rnd.processtool.dao.impl; import org.hibernate.FetchMode; import org.hibernate.Session; import org.hibernate.criterion.DetachedCriteria; import pl.net.bluesoft.rnd.processtool.dao.UserSubstitutionDAO; import pl.net.bluesoft.rnd.processtool.hibernate.SimpleHibernateBean; import pl.net.bluesoft.rnd.processtool.model.UserData; import pl.net.bluesoft.rnd.processtool.model.UserSubstitution; import java.util.Date; import java.util.List; /** * User: POlszewski * Date: 2011-08-31 * Time: 10:18:37 */ public class UserSubstitutionDAOImpl extends SimpleHibernateBean<UserSubstitution> implements UserSubstitutionDAO { public UserSubstitutionDAOImpl(Session hibernateSession) { super(hibernateSession); } @Override public List<UserSubstitution> getActiveSubstitutions(UserData user, Date date) { Session session = getSession(); return session.createQuery("from UserSubstitution where userSubstitute = :user and :date between dateFrom and dateTo") .setParameter("user", user) .setParameter("date", date) .list(); // return session.createCriteria(UserSubstitution.class) // .add(eq("userSubstitute", user)) // .add(ge("dateFrom", date)) // .add(le("dateTo", date)) // .list(); } @Override public List<UserData> getSubstitutedUsers(UserData user, Date date) { Session session = getSession(); return session.createQuery("select distinct us.user from UserSubstitution us where us.userSubstitute = :user and :date between us.dateFrom and us.dateTo") .setParameter("user", user) .setParameter("date", date) .list(); } @Override public void deleteById(Long id) { if (id == null) { return; } Session session = getSession(); Object item = session.createQuery("from UserSubstitution where id = :id") .setParameter("id", id) .uniqueResult(); if (item != null) { delete((UserSubstitution)item); } } @Override public List<UserSubstitution> findAllEagerUserFetch() { DetachedCriteria criteria = getDetachedCriteria() .setFetchMode(UserSubstitution._USER, FetchMode.JOIN) .setFetchMode(UserSubstitution._USER_SUBSTITUTE, FetchMode.JOIN); return findByCriteria(criteria); } }