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_11": "VALUE11",...............
]

我是否仍可以像 select语句中那样保留订单?

PS:无法创建模型来保存resultSet值,因为查询是 动态。因此,“ HAD TO”仅使用地图。

解决方法

尝试删除.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE)。我不是Hibernate专家,但是大多数JPA实现默认情况下都会返回一个Object数组列表,该列表保留列的顺序。

另一种选择是实现自己的转换器,在其中使用LinkedHashMap而不是HashMap。 AliasToEntityMapResultTransformer使用HashMap。