如您所见,我有两个命名参数,一个由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注入的攻击。

10-07 16:19