HQL查询返回的映射与查询中指定的顺序不同

时间:2015-07-24 09:52:43

标签: java hibernate hql

我正在执行这样的HQL查询:( hql查询将是动态的,具有不同的列名,没有列,数据类型)

Session session = getSession();
Query hqlQuery = session.createQuery("select a.id as Id, a.name as Name, a.description as Description, a.locationCountryId as LocationCountryId  from AboutUsMaster as a");
hqlQuery.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
List<Map<String, String>> myMapList =  hqlQuery.list();
for (Map<String, String> map : myMapList ){
        System.out.println(map.toString());
}

输出:

{Name=Test About, LocationCountryId=1, Description=Description, Id=9}

在地图中,我想获得与我在查询中选择的顺序相同的顺序。 在查询中,我选择idnamedescriptionlocationCountryId,但在地图中,我的输入顺序不同。

那么如何获得查询中指定的相同顺序?

2 个答案:

答案 0 :(得分:0)

您可以实现自己的ResultTransformer,类似于Criteria.ALIAS_TO_ENTITY_MAP指定的HashMap。您需要使用LinkedHashMap来保留元素的插入顺序,而不是使用import java.util.LinkedHashMap; import java.util.Map; public class AliasToLinkedEntityMapTransformer extends AliasedTupleSubsetResultTransformer { @Override public Object transformTuple(Object[] tuple, String[] aliases) { Map<String, Object> result = new LinkedHashMap<>(tuple.length); for (int i = 0; i < tuple.length; i++) { String alias = aliases[i]; if (alias != null) { result.put(alias, tuple[i]); } } return result; } @Override public boolean isTransformedValueATupleElement(String[] aliases, int tupleLength) { return false; } }

看起来像这样:

Armadillo

答案 1 :(得分:0)

地图中无法保证订单。

参考:Link

请允许我修改您的代码,

for (Map<String, String> map : myMapList ){
    System.out.println(map.get("Id"));
    System.out.println(map.get("Name"));
    System.out.println(map.get("Description"));
    System.out.println(map.get("LocationCountryId"));
 }