Я бы сказал, что Criteria API можно использовать, когда вам нужно создавать разные запросы для каждого запроса в зависимости от внешних условий.Например, это может быть API поиска с несколькими (переменными) условиями.HQL - это предопределенный запрос с предопределенным набором условий.Если вы хотите использовать HQL с переменными условиями, вам нужно создать запрос на конкатенацию строк, что является сложной задачей.И возможно, что SQL-инъекция может быть сделана с помощью HQL.