在将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中的参数,或者将其作为内联参数发送。
我的观点背后的原因是“最佳做法”,以及针对重复调用的查询性能
它被内联发送。当status是客户端控制的值时,您绝对不希望这样做。
status
而是将其参数化:
return currentSession() .createQuery("FROM Student student WHERE student.status = :status") .setParameter("status", status) .list();