package util.dao; import java.util.Date; import java.util.Set; import org.hibernate.Query; import org.hibernate.Session; import dao.DataAccessException; import dao.DoctorsDao; import entity.Doctor; import entity.Patient; public class DoctorDaoHibernate extends GenericDaoHibernate<Doctor> implements DoctorsDao{ private static DoctorDaoHibernate instance; public static DoctorDaoHibernate getInstance() { if (instance == null) { instance = new DoctorDaoHibernate(Doctor.class); } return instance; } protected DoctorDaoHibernate(Class<Doctor> pojoClass) { super(pojoClass); } @Override public Set<Doctor> findAllByPatient(final Patient patient, Date from, Date to) throws DataAccessException { return findByCallback(new DaoCallBackVisitor() { @Override public Query visit(Session session) { Query query = session.createQuery("select d from Doctor d inner join d.visits v where v.patient.id = :id"); query.setLong("id", patient.getId()); return query; } }); } }