「タスク」という名前のテーブルを含む MySQL データベースがあります。そして、Hibernate を使用してデータをデータベースにマップしました。
次のフィールドが含まれます: id、user_id、project_id、deliverable_id、activity_id、...
DB からタスクを取得するときは、最初にプロジェクトで並べ替え、次に成果物で並べ替え、最後にアクティビティで並べ替える必要があります。
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
List<Task> tasks = (List<Task>)session.createQuery(
"from Task as t where t.user.username = :name order by t.project.key ASC").setString("name", username).list();
orderByDeliverable(tasks);
orderByActivity(tasks);
private void orderByDeliverable(List<Task> tasks) {
Collections.sort(tasks, new Comparator<Task>(){
public int compare(Task t1, Task t2) {
if(t1.getProject().getId() == t2.getProject().getId())
return t1.getDeliverable().getKey().compareToIgnoreCase(t2.getDeliverable().getKey());
return 0;
}
});
}
private void orderByActivity(List<Task> tasks) {
Collections.sort(tasks, new Comparator<Task>(){
public int compare(Task t1, Task t2) {
if(t1.getProject().getId() == t2.getProject().getId())
if(t1.getDeliverable().getId() == t2.getDeliverable().getId())
return t1.getActivity().getKey().compareToIgnoreCase(t2.getActivity().getKey());
return 0;
}
});
}
コードでわかるように、2 つの方法を使用して成果物とアクティビティで並べ替えましたが、クエリではプロジェクトで並べ替えています。
私はクエリの作成が苦手です。クエリですべての並べ替えを実行して同じ結果を得る方法を知っていますか?