准备好的语句、hibernate和HQL

准备好的语句、hibernate和HQL,hibernate,jdbc,hql,prepared-statement,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 = cu

在将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();
  }
公共列表loadAllStudentsByStatus(字符串状态){
字符串queryString=“FROM Student WHERE Student.status=“+status;
Query queryObject=currentSession().createQuery(queryString);
返回queryObject.list();
}
状态将被“解析”并用作SQL中的参数,还是作为内联参数发送。


我提出这个论点的原因是“最佳实践”,以及重复调用的查询性能。当
status
是客户机控制的值时,您肯定不想这样做

而是将其参数化:

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