Java nativeQuery:带有 AliasToEntityMapResultTransformer 的结果集在地图中有无序列

Java nativeQuery: ResultSet with AliasToEntityMapResultTransformer has unordered columns in map

我正在尝试将结果集获取为地图,并且我已成功将其放入地图中。但是映射键不是按照 select query

的顺序

请查看验证码:

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"
  },
  ...............
]

无论如何我可以保留select语句中的顺序吗?

PS: Can't create a model to hold the resultSet values as query is dynamic. So "HAD TO" use map only.

尝试删除 .setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE)。我不是 Hibernate 专家,但大多数 JPA 实现 return 默认情况下保留列顺序的对象数组列表。

另一种方法是实现您自己的转换器,其中您使用 LinkedHashMap 而不是 HashMap。 AliasToEntityMapResultTransformer 使用 HashMap。