Java 按不在JPQL查询中工作的顺序排序

Java 按不在JPQL查询中工作的顺序排序,java,sql,jpql,Java,Sql,Jpql,我使用以下方法返回基于用户部门和建筑的HashMap。我想根据用户名按ASC订购 private HashMap<Long, String> getCriticalPde(long departmentId, long buildingId) { HashMap<Long, String> map = new HashMap<Long, String>(); Query query = emf .createEntityMana

我使用以下方法返回基于用户部门和建筑的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/等中运行时,此脚本不会正确排序。有什么想法吗?

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

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

顺序肯定有效,但哈希映射无效。哈希映射不保留插入顺序。使用LinkedHashMap代替

order by肯定有效,但HashMap无效。哈希映射不保留插入顺序。改为使用LinkedHashMap

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

您正在检索有序结果列表,然后将其存储在无序哈希映射中。使用有序集合存储用户