当将 HQL 转换为 SQL 时,Hibernate 在内部使用 JDBC 下的PreparedStatements。 HQL 中的内联参数是如何处理的?
example:
public List<Student> loadAllStudentsByStatus(String status) {
String queryString = "FROM Student student WHERE student.status = " + status;
Query queryObject = currentSession().createQuery(queryString);
return queryObject.list();
}
状态将被“解析”并用作 SQL 中的参数,还是作为内联参数发送。
我争论背后的原因是“最佳实践”,以及重复调用的查询性能
它被内联发送。你绝对不想这样做status
是客户端控制的值。
而是参数化它:
return currentSession()
.createQuery("FROM Student student WHERE student.status = :status")
.setParameter("status", status)
.list();
也可以看看:
- OWASP-休眠 http://www.owasp.org/index.php/Hibernate
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)