微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java nativeQuery:具有AliasToEntityMapResultTransformer的ResultSet在地图中具有无序的列

如何解决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。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。