如何通过id避免hibernate默认顺序?

时间:2012-09-02 08:18:51

标签: java hibernate hql

我提出这个问题:

String query = FROM Account acc WHERE acc.id = ? OR acc.id = ? or acc.id = ?...

我有一系列ID:

long[] accountIds= {327913,327652,327910,330511,330643};

然后我做

getHibernateTemplate().find(query, accountIds);

我看到我从此查询中获得的帐户列表是:

327652,327910,327913,330511,330643,显然是按id排序的。

我是否有机会按照我写的ID的顺序将其恢复?

将感谢所有帮助

4 个答案:

答案 0 :(得分:2)

您可能希望使用Criteria及其addOrder

这样的事情:

DetachedCriteria cr = DetachedCriteria.forClass(entityClass);
//Add expressions or restrictions to your citeria
//And add your ordering
cr.addOrder(Order.asc("yourID"));
List<T> ls = getHibernateTemplate().findByCriteria(cr);
return ls;

答案 1 :(得分:1)

您无法在查询级别上执行此操作 您可以在从db加载后进行排序,类似这样

   long[] accountIds= {327913,327652,327910,330511,330643};
   List<Account> afterHql = getHibernateTemplate().find(query, accountIds);
   List<Account> sortedList = new ArrayList<Acount>();
   for (long id : accountIds)
   {
       for (Account account : afterHql)
       {
           if (account.getId() == id)
           {
               sortedList.add(account);
           }
       }
   }

答案 2 :(得分:0)

无法通过在OR QueryRestrictions.in()中提供任何实体来获取结果。当你解雇这种查询时,聋人就会狡猾地搜索结果。所以它只会给你带来明智的结果。您可以在asc或desc中使用Criteria更改订单。如果你想根据你输入id得到结果,那么第二个答案是唯一的选择。

答案 3 :(得分:0)

您只能按查询返回的列值按数据类型定义的顺序排序。预订您提供的ID并按ID排序查询结果不是更好吗?所以它们按照相同的顺序出现?