我正在执行这样的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}
在地图中,我想获得与我在查询中选择的顺序相同的顺序。
在查询中,我选择id
,name
,description
,locationCountryId
,但在地图中,我的输入顺序不同。
那么如何获得查询中指定的相同顺序?
答案 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"));
}