Подтвердить что ты не робот

Подготовленные операторы, спящий режим и HQL

Hibernate внутренне использует PreparedStatements под JDBC при преобразовании HQL в SQL. Как обрабатываются встроенные параметры в HQL?

Пример:

  public List<Student> loadAllStudentsByStatus(String status) {
    String queryString = "FROM Student student WHERE student.status = " + status;
    Query queryObject = currentSession().createQuery(queryString);
    return queryObject.list();
  }

Статус будет "разобран" и использоваться как параметр в SQL, или он будет отправлен как встроенный параметр.

Моей причиной аргумента является "лучшие практики" и производительность запросов для повторных вызовов

4b9b3361

Ответ 1

Он отправляется в очередь. Вы определенно не хотите этого делать, когда status является контролируемым клиентом значением.

Скорее его параметризуйте:

return currentSession()
    .createQuery("FROM Student student WHERE student.status = :status")
    .setParameter("status", status)
    .list();

См. также: