Вместо использования HQL используйте запрос Criteria
. Он разработан, чтобы быть более программным, чем HQL, так как вы используете прямой Java-код для сборки вашего запроса, что позволяет вам использовать логику if-then. Таким образом, вместо того, чтобы объединять HQL или иметь два разных HQL-запроса, которые необходимо поддерживать независимо, у вас есть один Criteria
запрос, который учитывает обе ситуации. Пример:
//SELECT ClinicId,Name from Clinic where :ClinicIds is NULL OR ClinicId IN :ClinicIds
Criteria criteria = getSession().createCriteria(Clinic.class);
if(ClinicIds == null) {
criteria.add(Restrictions.eq("ClinicId", null));
} else {
criteria.add(Restrictions.or(
Restrictions.eq("ClinicId", null),
criteria.add(Restrictions.in("ClinicId", ClinicIds));
)
);
}
return criteria.list();