准备好的语句,hibernate和HQL

时间:2010-12-02 21:52:52

标签: hibernate jdbc hql 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();
  }

状态是“已解析”并在SQL中用作参数,还是作为内联参数发送。

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

1 个答案:

答案 0 :(得分:18)

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

而是将其参数化:

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

另见: