我有一个像这样的HQL查询:
Query query = session.createQuery("from User as user where user.joined!=null order by user.joined desc");
如何将变量User属性设置为查询的排序顺序?我的解决方案:
String order = "user.joined";
Query query = session.createQuery("from User as user where user.joined!=null order by :order desc").setString("order", order);
不会提供有序的查询结果。
答案 0 :(得分:3)
List<User> users = session.createCriteria(User.class)
.add(Restrictions.isNotNull("joined"))
.addOrder(Order.desc(order))
.list();
或者,使用HQL:
Query query = session.createQuery("from User as user where user.joined!=null order by user." + order + " desc");
答案 1 :(得分:1)
在第二个查询中,当您使用此方法时调用:
[Hibernate Query object].setString("order", order)
您正在尝试将列名绑定为参数,这是不可能的。
什么是参数(针对此问题)遵循SQL参数定义,它也是JDBC API PreparedStatement中使用的参数定义。
要动态构建查询(除了它的参数),还有其他解决方案,如Matt Ball指出的解决方案。您还可以看到Using a prepared statement and variable bind Order By in Java with JDBC driver。
答案 2 :(得分:0)
旧帖子,由Matt Ball提供的有关HQL的答案很容易受到sql注入的攻击。只需遵守条件或进行一些输入清理即可!