通过Hibernate查询获取列名 [英] Get Column Name By Hibernate Query

查看:757
本文介绍了通过Hibernate查询获取列名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

List results = query.list();

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

In above code, results contains elements of Map and I am able to get the column name by key of Map but as you know query.list() returns the elements of HashMap thats why the ordering of column name not in sequence and I want the column name odering baseed on sql-query sequence.

推荐答案

这是一个非常古老的问题,但它是有些烦人,为什么在变形金刚中没有这样的东西。

This is a very old question, but it is a bit vexing as to why there isn't something like this in the transformers already.

用转换器运行查询:

Query sqlQuery = session.createSQLQuery(sqlStatement);
sqlQuery.setResultTransformer(AliasToEntityLinkedMapResultTransformer.INSTANCE);

List results = query.list();

对于变换器,我扩展了BasicTransformerAdapter而不是AliasToEntityMapResultTransformer。

For the transformer, I extended BasicTransformerAdapter as opposed to 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()
    }
}

没有什么革命性的或简单的,但它就是它。

Nothing revolutionary or straightforward, but there it is.

这篇关于通过Hibernate查询获取列名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆