准备好的语句,hibernate和HQL

Var*_*hta 11 hibernate hql jdbc prepared-statement

在将HQL转换为SQL时,Hibernate在JDBC内部使用PreparedStatements.如何处理HQL中的内联参数?

例:

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

状态是"解析"并在SQL中用作参数,还是作为内联参数发送.

我在论证背后的原因是"最佳实践",以及重复调用的查询性能

Bal*_*usC 18

它是内联发送的.当status客户端控制的值时,您绝对不希望这样做.

而是参数化它:

return currentSession()
    .createQuery("FROM Student student WHERE student.status = :status")
    .setParameter("status", status)
    .list();
Run Code Online (Sandbox Code Playgroud)

也可以看看: