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

データ型によって定義された順序で、クエリによって返された列の値によってのみ並べ替えることができます。提供する ID を事前に並べ替えて、クエリ結果を ID で並べ替えて、同じ順序で表示されるようにする方がよいのではないでしょうか?

于 2012-09-02T22:21:50.943 に答える
0

OR Queryまたはにエンティティを指定して結果を取得することはできませんRestrictions.in()。デフォルトでは、この種のクエリを起動すると、結果 ID が賢明に検索されます。したがって、結果はIDのみに基づいて提供されます。asc または desc で Criteria を使用して順序を変更できます。入力した ID に応じた結果が必要な場合は、2 番目の回答が唯一の選択肢です。

于 2012-09-02T09:23:43.160 に答える