如何避免按id的休眠默认顺序



我进行以下查询:

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);

我看到我从这个查询中得到的账户列表是:

327652327910327913330511330643,显然是由id订购的。

我有没有可能按照我写id的顺序把它拿回来?

将感谢的所有帮助

您可能需要使用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;

您不能在查询级别执行此操作
你可以从数据库加载后进行排序,类似于这个

   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);
           }
       }
   }

无法通过在OR QueryRestrictions.in()中提供任何实体来获取结果。正如deafult一样,当您启动这种查询时,它将按id搜索结果。所以它只会给你id方面的结果。你可以在asc或desc中使用Criteria来更改顺序。如果你想根据你输入的id得到结果,那么第二个答案是唯一的选择。

您只能按查询返回的列值按数据类型定义的顺序排序。预购您提供的ID,并按ID对查询结果进行排序,这样它们就会以相同的顺序出现,这不是更好吗?

最新更新