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:由于查询是动态的,因此无法创建模型来保存resultSet值。因此,“ HAD TO”仅使用地图。

ung

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章