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。
我正在尝试将结果集获取为地图,并且我已成功将其放入地图中。但是映射键不是按照 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。