我有一个 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 中按项目对它们进行排序。
我不擅长查询写作,你知道有什么方法可以在查询中进行所有排序并获得相同的结果吗?