2

我有一个 MySQL 数据库,其中包含一个名为“Task”的表。我使用 Hibernate 将数据映射到数据库。

它包括以下字段:id、user_id、project_id、deliverable_id、activity_id、...

当我从 Db 中检索任务时,我需要首先按 Project 对它们进行排序,然后按 Deliverable 排序,最后按 Activty。

         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;
           }
       });
    }

正如您在代码中看到的,我使用两种方法按可交付成果和活动对它们进行排序,但我在 Query 中按项目对它们进行排序。

我不擅长查询写作,你知道有什么方法可以在查询中进行所有排序并获得相同的结果吗?

4

1 回答 1

1

我找到了答案。我只需要使用这个查询:

tasks = (List<Task>)session.createQuery("from Task as t where t.user.username = :name 
order by t.project.key ASC, t.deliverable.key ASC, t.activity.key ASC")
.setString("name", username).list();

它对我来说也是一样的。

实际上,我正在寻找这个解决方案来加速我开发的应用程序。我测试了哪个更快。结果是一样的。它不会加速应用程序。

于 2012-06-29T23:27:17.757 回答