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

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


person Varun Mehta    schedule 02.12.2010    source источник


Ответы (1)


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

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

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

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

person BalusC    schedule 03.12.2010