通过Hibernate查询获取列名

时间:2012-09-05 10:04:22

标签: hibernate

Query query = this.getSession().createSQLQuery(sqlQuery);       
query.setResultTransformer(new AliasToEntityMapResultTransformer());

List results = query.list();

在上面的代码中,results包含Map的元素,我可以通过Map的键获取列名,但是如您所知query.list()返回HashMap的元素,这就是为什么列名的排序不按顺序排列,我希望基于sql-query序列的列名odering。

2 个答案:

答案 0 :(得分:1)

使用AliasToEntityLinkedMapResultTransformer的代码作为示例,但使用AliasToEntityMapResultTransformer代替LinkedHashMap来实施您自己的HashMapLinkedHashMap保留了广告订单。

答案 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()
    }
}

没有什么是革命性的或直截了当的,但确实如此。

相关问题