【问题标题】:Prepared statements, hibernate and HQL准备好的语句、hibernate 和 HQL
【发布时间】:2011-05-19 10:16:12
【问题描述】:

在将 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 中的参数,还是作为内联参数发送。

我的理由是“最佳实践”,以及重复调用的查询性能

【问题讨论】:

    标签: hibernate jdbc hql prepared-statement


    【解决方案1】:

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

    而是参数化它:

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

    另见:

    【讨论】:

      猜你喜欢
      • 2017-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      相关资源
      最近更新 更多