问题描述
我正在尝试将结果集作为地图获取,并成功地将其添加到地图中。但是地图键不是按照选择查询的顺序
请检查代码:
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_11": "VALUE11",...............
]
我是否仍可以像 select语句中那样保留订单?
PS:无法创建模型来保存resultSet值,因为查询是 动态。因此,“ HAD TO”仅使用地图。
解决方法
尝试删除.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE)
。我不是Hibernate专家,但是大多数JPA实现默认情况下都会返回一个Object数组列表,该列表保留列的顺序。
另一种选择是实现自己的转换器,在其中使用LinkedHashMap而不是HashMap。 AliasToEntityMapResultTransformer使用HashMap。