в общем случае, по возможности, следует избегать написания SQL;
одно из преимуществ использования ORM заключается в том, что он не зависит от реализации.
это означает, что вы не знаете (и не заботитесь) о том, чтобазовая база данных есть, и вы действительно можете легко переключать поставщиков БД или настраивать структуру БД.
Если вы пишете свои собственные операторы SQL, вы рискуете, что они не будут работать с другими поставщиками, а также вам придется поддерживать ихсамостоятельно (например, если вы измените имя нижележащего столбца для свойства Id с «Id» на «Employee_Id», вам придется изменить ваш SQL-запрос, в то время как с критериями никаких изменений не потребуется).
Сказав это, ничто не мешает вам написать Criteria / HQL, который извлекает данные из более чем одной таблицы.например (с HQL):
select emp.Id, dep.Name, po.Id
from Employee emp, Department dep, Posts po
where emp.Name like 'snake' //etc...