我希望生成hql查询,其中可以在运行时选择持久化对象变量及其值(为了更新单个字段)。即如下所示:
String field, value;
String queryString = "update User u set u."+field+" = "+ value +" where (someCondition)"
此代码有效,但对于hql注入不安全。尝试使用命名参数方法
执行此操作Update user u set :field = :value where (someCondition)
抛出querySyntaxException:
"expecting IDENT, found ":";
尝试使用查询字符串"... u.?=? ..."
答案 0 :(得分:0)
其他人正在寻找如何做到这一点: 我已经意识到为什么它可能无法防止hql注入字段名称:最终用户不应该知道我的对象变量名称[* facepalm]。 / p>
所以我可以通过自由连接成员变量的字符串来解决问题,但是使用命名参数来安全地插入该变量的值(用户确实提供了该值)。
String queryString = "update User u set u." + field + " = :value where (someCondition)";
等