ORDER BY 在 JPQL 查询中不起作用
ORDER BY Not Working in JPQL Query
我有以下方法 returns 基于用户部门和建筑物的 HashMap。我想根据用户名
ORDER BY 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。有什么想法吗?
您正在丢失顺序,因为您使用的是 HashMap,它不能保证迭代的顺序。尝试改用 LinkedHashMap,它将保留原始顺序。
order by 绝对有效,但 HashMap
无效。哈希图不保留插入顺序。改为使用 LinkedHashMap
您正在检索一个有序的结果列表,然后将其存储在一个无序的哈希图中。使用有序集合来存储用户。
我有以下方法 returns 基于用户部门和建筑物的 HashMap。我想根据用户名
ORDER BY ASCprivate 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。有什么想法吗?
您正在丢失顺序,因为您使用的是 HashMap,它不能保证迭代的顺序。尝试改用 LinkedHashMap,它将保留原始顺序。
order by 绝对有效,但 HashMap
无效。哈希图不保留插入顺序。改为使用 LinkedHashMap
您正在检索一个有序的结果列表,然后将其存储在一个无序的哈希图中。使用有序集合来存储用户。