2017-01-31 5 views
3

私はjavaを使用してWebサービスを実装しています。 この実装では、次のステップがあります。Javaのコンパイラと同等の負のシナリオ

1)データベースへのhibernateフェッチ値の使用。

2)

List<IdentityDocArchive> resultList = q.getResultList(); 

3)は、私は別のリスト

への最後の更新日
Collections.sort(identityDocList, new Comparator<IdentityDocArchive>() { 
      DateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); 
      @Override 
      public int compare(IdentityDocArchive o1, IdentityDocArchive o2) { 
      try { 
        return f.parse(o2.getLastUpdtDt().toString()).compareTo(f.parse(o1.getLastUpdtDt().toString())); 
       } catch (ParseException e) { 
        LOGGER.warning("Failed To Parsing string to date ".concat(e.getMessage())); 
        throw new IllegalArgumentException(e); 
       } 
      } 
     }); 
)次に、このリスト値ストアをソートないクラス豆リストタイプに値ストアをフェッチ

私の質問は、より良いアプローチではない場合は実装する正しい方法です。

+3

'java.util.Date'は' Comparable'なので、日付解析の部分は不要です。 –

+0

クエリをソートしないのはなぜですか? – lexicore

+0

'getLastUpdtDt()'が 'Date'を返すと仮定します。 –

答えて

1

Hibernateを使用するので、hibernate/JPAを使用してデータをソートする必要があります。 named queryorder by ...またはCriteriaQuery.orderBy(...)を経由してください。 そのためにJava EE persistence tutorialをチェックアウトすることもできます。

を使用して並べ替えることもできますが、データベースの目的のジョブを実行しています。 (免責事項:もちろん、あなたのデータベースを適切に設定する必要があります:インデックスなど)

+0

しかし、それが私のリストに格納されている場合は、インデックスを変更することになります – JDevil

+0

ごめんなさい...あなたのコメントを言い換えてください。 – Roland

+0

は、リストに値ストアされるソート後に変更される可能性があります。値が変更された場合、値の並べ替え順序は – JDevil

0

DB内のデータをソートしたくない場合、リスト内のオブジェクトがどれもなく、最終更新日は」null可能な属性、あなただけの降順ため、このようなあなたのComparatorを実現することができます。

Collections.sort(identityDocList, new Comparator<IdentityDocArchive>() { 
      @Override 
      public int compare(IdentityDocArchive o1, 
           IdentityDocArchive o2) {        
       return o2.getLastUpdtDt().compareTo(o1.getLastUpdtDt()); 
      } 
     }); 

それは冗長な日付の解析を避けるため、このソリューションは、あなたのオリジナルのものよりも高速でなければなりません。

DB内のソートやメモリ内のソートが良いかどうかは、に依存します。状況によっては、Hibernateがクエリ内にORDER BY句を生成すると、全体的なパフォーマンスが低下し、メモリ内のソートが高速になることがあります。おそらくほとんどの場合、両方の選択肢のパフォーマンスは非常に似ています。しかし、自分で試してみる必要があります。