java - Java nativeQuery:带有 AliasToEntityMapResultTransformer 的 ResultSet 在地图中具有无序列
问题描述
我正在尝试将结果集作为地图获取,并且我成功地将其放入地图中。但是地图键不是按照选择查询的顺序
请检查代码:
String queryString = "SELECT T1.COLUMN_11, T1.COLUMN_12, T2.COLUMN_21, T2.COLUMN_22 FROM MYSCHEMA.TABLE1 T1 INNER JOIN MYSCHEMA.TABLE2 T2 ON T1.SOME_COLUMN = T2.SOME_OTHER_COLUMN";
Query query = entityManager.createNativeQuery(queryString)
.unwrap(org.hibernate.query.Query.class)
.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
List<Map<String, Object>> resultSet = queryEx.getResultList();
现在按照预期List<Map<String, Object>> resultSet
应该如下所示
[
{
"COLUMN_11": "VALUE11",
"COLUMN_12": "VALUE12",
"COLUMN_21": "VALUE21",
"COLUMN_22": "VALUE22"
},
...............
]
但是这些列是混乱的,如下所示
[
{
"COLUMN_21": "VALUE21",
"COLUMN_12": "VALUE12",
"COLUMN_11": "VALUE11",
"COLUMN_22": "VALUE22"
},
...............
]
无论如何我可以保留选择语句中的订单吗?
PS:无法创建模型来保存结果集值,因为查询是动态的。所以“必须”只使用地图。
解决方案
尝试删除.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE)
. 我不是 Hibernate 专家,但大多数 JPA 实现默认返回一个对象数组列表,这些数组保留列的顺序。
另一种方法是实现您自己的转换器,使用 LinkedHashMap 而不是 HashMap。AliasToEntityMapResultTransformer使用 HashMap。
推荐阅读
- javascript - 是否可以在 wavesurfer.js 中显示带有波形的 y 轴?
- css - 如何防止另一个 SVG 剪辑中的 SVG
- traveling-salesman - 穿越所有城市,但允许分叉(可以拆分自己的旅行推销员)
- c - 如何在中间设置一个输入框并在按钮之间填充标题栏
- redis - 使用 lfu 收集 redis 热键频率
- go - 为 big.Int 创建了一个类型别名 - 但我不能使用它的指针接收器设置它?
- javascript - 如何根据 Google Tag Manager 获取 Google Analytics Tracking ID?
- excel - 如何计算出达到或高于某个数字范围的价值增长百分比
- javascript - 用于替换标点符号的正则表达式,不包括负数
- java - java.lang.RuntimeException:无法为类 DBExecuter.Queryjson$valIOConfigclass 调用无参数构造函数