在将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中用作参数,还是作为内联参数发送。
我在论证背后的原因是“最佳实践”,以及重复调用的查询性能
答案 0 :(得分:18)
它是内联发送的。当status
是客户端控制的值时,您肯定不希望这样做。
而是将其参数化:
return currentSession()
.createQuery("FROM Student student WHERE student.status = :status")
.setParameter("status", status)
.list();