Query query = this.getSession().createSQLQuery(sqlQuery);
query.setResultTransformer(new AliasToEntityMapResultTransformer());
List results = query.list();
在上面的代码中,results
包含Map的元素,我可以通过Map的键获取列名,但是如您所知query.list()
返回HashMap的元素,这就是为什么列名的排序不按顺序排列,我希望基于sql-query序列的列名odering。
答案 0 :(得分:1)
使用AliasToEntityLinkedMapResultTransformer
的代码作为示例,但使用AliasToEntityMapResultTransformer
代替LinkedHashMap
来实施您自己的HashMap
。 LinkedHashMap
保留了广告订单。
答案 1 :(得分:1)
这是一个非常古老的问题,但是为什么在变形金刚中已经没有这样的东西了,这有点令人烦恼。
使用变换器运行查询:
Query sqlQuery = session.createSQLQuery(sqlStatement);
sqlQuery.setResultTransformer(AliasToEntityLinkedMapResultTransformer.INSTANCE);
List results = query.list();
对于变换器,我扩展了BasicTransformerAdapter而不是AliasToEntityMapResultTransformer。
import org.hibernate.transform.BasicTransformerAdapter
public class AliasToEntityLinkedMapResultTransformer extends BasicTransformerAdapter implements Serializable {
public static final AliasToEntityLinkedMapResultTransformer INSTANCE = new AliasToEntityLinkedMapResultTransformer();
private AliasToEntityLinkedMapResultTransformer() {
}
public Object transformTuple(Object[] tuple, String[] aliases) {
Map 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;
}
private Object readResolve() {
return INSTANCE
}
public boolean equals(Object other) {
return other != null && AliasToEntityLinkedMapResultTransformer.class.isInstance(other)
}
public int hashCode() {
return getClass().getName().hashCode()
}
}
没有什么是革命性的或直截了当的,但确实如此。