package util.dao;
import java.util.Date;
import java.util.Set;
import org.hibernate.Query;
import org.hibernate.Session;
import dao.DataAccessException;
import dao.VisitsDao;
import entity.Doctor;
import entity.Patient;
import entity.Visit;
public class VisitDaoHibernate extends GenericDaoHibernate<Visit> implements VisitsDao{
private static VisitDaoHibernate instance;
public static VisitDaoHibernate getInstance() {
if (instance == null) {
instance = new VisitDaoHibernate(Visit.class);
}
return instance;
}
protected VisitDaoHibernate(Class<Visit> pojoClass) {
super(pojoClass);
}
@Override
public Set<Visit> findAllByDoctor(final Doctor doctor, final Date from, final Date to) throws DataAccessException {
return findByCallback(new DaoCallBackVisitor() {
@Override
public Query visit(Session session) {
Query query = session.createQuery("from Visit v where v.date > :from and date < :to and v.doctor.id = :id ");
query.setDate("from", from);
query.setDate("to", to);
query.setLong("id", doctor.getId());
return query;
}
});
}
@Override
public Set<Visit> findAllByPatient(final Patient patient, final Date from, final Date to) throws DataAccessException {
return findByCallback(new DaoCallBackVisitor() {
@Override
public Query visit(Session session) {
Query query = session.createQuery("from Visit v where v.date between :from and :to and v.patient.id = :id");
query.setDate("from", from);
query.setDate("to", to);
query.setLong("id", patient.getId());
return query;
}
});
}
}