Готовые операторы, спящий режим и HQL - PullRequest
11 голосов
/ 03 декабря 2010

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 или будет отправлено как встроенный параметр.

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

1 Ответ

18 голосов
/ 03 декабря 2010

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

Скорее параметризовать его:

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

Смотри также:

...