如您所见,我有两个命名参数,一个由setParameterList()设置,另一个由setParmeter()设置。问题是列表未排序。当我显式设置order字段时,它可以正常工作,但是将相同的字符串传递到该方法中则不起作用。是setParameter和setParameterList无法链接的吗?他们都返回查询,我不明白为什么不这样做。我想念什么?
public List<Subject> getSubjectsByMedium(String orda, Medium... medium) {
List<Subject> subjects = currentSession().createQuery("from Subject where medium in(:medium) order by :orda").setParameterList("medium", medium).setParameter("orda", orda).list();
return Subjects;
}
最佳答案
不,这不是方法链接的问题。问题是您不能使用命名参数在HQL(或SQL)查询中设置ORDER
。
您需要分别构建查询字符串,然后在创建的:medium
对象上设置Query
命名参数。
String query = "from Subject where medium in(:medium) order by " + orda;
这可能确实使您容易受到SQL注入的攻击。