Внедрение SQL не должно быть риском при использовании Hibernate - при условии, что вы используете его правильно.
Запросы Hibernate либо пишутся на HQL (SQL-подобный язык запросов Hibernate), либо реализуются с использованием объектно-ориентированного API Criteria.
HQL является наиболее распространенным и наиболее рекомендуемым. Обычно вы пишете запрос HQL следующим образом:
Subscription sub = (Subscription) sessionFactory.getCurrentSession()
.createQuery("from Subscription sub where sub.verification = :verification")
.setString("verification", verification)
.uniqueResult();
В этой форме вы защищены от внедрения SQL, потому что Hibernate передает строку как параметр; его нельзя интерпретировать как часть SQL.
Однако, если вы ведете себя плохо, напишите запрос, подобный этому ...
Subscription sub = (Subscription) sessionFactory.getCurrentSession()
.createQuery("from Subscription sub where sub.verification = '" + verification + "'")
.uniqueResult();
... тогда вы не защищены от внедрения SQL. Однако вы никогда не должны писать подобные запросы! Я не думаю, что какая-либо структура защитит вас, если вы добавите строки в свои запросы.
Наконец, если вы используете Hibernate Criteria API, вы автоматически защищены от внедрения SQL; поскольку Hibernate создает базовый запрос при использовании API Criteria, он делает это таким образом, чтобы предотвратить внедрение SQL.