Search code examples
hibernatehql

Custom order by string parameter in HQL


I had an HQL query like this:

Query query = session.createQuery("from User as user where user.joined!=null order by user.joined desc");

How do I set a variable User property as the sort order for my query? My solution:

String order = "user.joined";
Query query = session.createQuery("from User as user where user.joined!=null order by :order desc").setString("order", order);

does not give an ordered query result.


Solution

  • Use a criteria query.

    List<User> users = session.createCriteria(User.class)
        .add(Restrictions.isNotNull("joined"))
        .addOrder(Order.desc(order))
        .list();
    

    Or, using HQL:

    Query query = session.createQuery("from User as user where user.joined!=null order by user." + order + " desc");