0

我做这个查询:

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

4 回答 4

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;
于 2012-09-02T08:56:20.700 回答
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);
           }
       }
   }
于 2012-09-02T08:23:51.253 回答
0

无法通过在OR Query或中提供任何实体来获取结果Restrictions.in()。当你触发这种查询时,它会默认搜索结果 id。所以它只会给你明智的结果。您可以在 asc 或 desc 中使用 Criteria 更改顺序。如果您想根据输入的 id 获得结果,那么第二个答案是唯一的选择。

于 2012-09-02T09:23:43.160 回答
0

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

于 2012-09-02T22:21:50.943 回答