如您所见,我有两个命名参数,一个由 setParameterList() 设置,一个由 setParmeter() 设置。问题是列表没有排序。当我显式设置订单字段时,它工作正常,但相同的字符串被传递到方法中,它不起作用。难道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
。
您需要单独构建查询字符串,然后在创建的 Query
对象上设置 :medium
命名参数。
String query = "from Subject where medium in(:medium) order by " + orda;
这可能会让您容易受到 SQL 注入(inject)的攻击。
关于java - Hibernate 查询上的链接 setParameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18898315/