ORDER BY在JPQL查询中不起作用

时间:2015-07-23 14:11:57

标签: java sql jpql

我有以下方法返回基于Users Department和Building的HashMap。我想根据用户名

订购ASC
private HashMap<Long, String> getCriticalPde(long departmentId, long buildingId) {
    HashMap<Long, String> map = new HashMap<Long, String>();
    Query query = emf
        .createEntityManager()
        .createQuery(
            "SELECT parent FROM Table1 parent WHERE parent.id NOT IN "
            + "(SELECT chldQry.userId FROM Table2 chldQry "
            + "WHERE chldQry.departmentId = :departmentId "
            + "AND chldQry.buildingId = :buildingId)"
            + "ORDER BY parent.userName ASC");
        query.setParameter("departmentId", departmentId);
        query.setParameter("buildingId", buildingId);
        List<User> list= (List <User>) query.getResultList();
        for (User user : userList) {
            map .put(user.getId(), user.getName());
        }
    return map;
}

但是当我的地图被退回时,它仍由UserId订购。在Toad / Squirrel / etc中运行时,此脚本正确执行ORODER BY。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

您正在丢失订单,因为您使用的是HashMap,它不会保证迭代的顺序。尝试使用LinkedHashMap,它将保留原始订单。

答案 1 :(得分:2)

订单明确有效,HashMap不是什么。 Hashmaps不保留插入顺序。请改用LinkedHashMap

答案 2 :(得分:1)

您正在检索有序的结果列表,然后将其存储在UNordered hashmap中。使用有序集合来存储用户。