java - Hibernate 查询上的链接 setParameter

标签 java hibernate spring-mvc hql

如您所见,我有两个命名参数,一个由 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/

相关文章:

java - Android Activity 变黑然后崩溃

java - Eclipse EE IDE 中的 Servlet 和 JSP 与 MYSQL 数据库的连接

java - 未经授权的 Rovi TV Listings Service Soap 1.2

java - Spring Security验证用户进入admin

java - 抛出异常时重定向请求

spring-mvc - 如果我们有两个模型对象数据,则验证表单

java - 流利地添加到集合中(添加并返回值)

java - Hibernate设置 boolean 值

java - 第一次连接org.hibernate.exception.JDBCConnectionException : Unable to acquire JDBC Connection

hibernate - Grails一对多保存的子代仅刷新父子集