一尘不染

准备好的语句,休眠和HQL

hibernate

在将HQL转换为SQL时,Hibernate在JDBC内部使用PreparedStatement。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中的参数,或者将其作为内联参数发送。

我的观点背后的原因是“最佳做法”,以及针对重复调用的查询性能


阅读 262

收藏
2020-06-20

共1个答案

一尘不染

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

而是将其参数化:

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

也可以看看:

2020-06-20