我进行以下查询:
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 Query
或Restrictions.in()
中提供任何实体来获取结果。正如deafult一样,当您启动这种查询时,它将按id搜索结果。所以它只会给你id方面的结果。你可以在asc或desc中使用Criteria来更改顺序。如果你想根据你输入的id得到结果,那么第二个答案是唯一的选择。
您只能按查询返回的列值按数据类型定义的顺序排序。预购您提供的ID,并按ID对查询结果进行排序,这样它们就会以相同的顺序出现,这不是更好吗?