Честно говоря, я не вижу проблем с вашим текущим подходом, если предположить, что ваши запросы настолько просты и понятны.
Обычно, по крайней мере в моей команде, выбор использования HQL против критериев более"предпочтения" вещь.HQL больше похож на SQL, и вы можете написать более сжатый код.Критерии выглядят более понятными для некоторых разработчиков.
В моем случае я склонен использовать HQL, поскольку он позволяет мне писать более короткий и понятный код для сложных запросов (опять же, я считаю, что это действительно вопрос предпочтений),Тем не менее, критерии также могут быть очень полезны, потому что они позволяют на лету создавать условия запроса намного проще, чем HQL, вот очень простой пример: -
public void doIt(String s1, String s2, String s3){
...
if (/*some s1 condition*/) {
crit.add(Restrictions.eq("s1", s1));
}
if (/*some s2 condition*/) {
crit.add(Restrictions.like("s2", s2 + "%"));
}
if (/*some s3 condition*/) {
crit.add(Restrictions.ne("s3", s3));
}
return crit.list();
}
Представьте, что вы должны сделать что-то вродев HQL вам придется динамически создавать строку запроса HQL на лету, что может сделать код немного неприятным для чтения.