1

我用这些东西来获得一个 List>,这对于像“resultSet”这样的数据操作非常有趣。我的方法是:requeteSQL.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);

当我用 sqldevelopper 执行这个查询时,我得到了示例 | 字段 1 | 字段 2 第 1 行 | 值 1 | 价值 2

但是我的地图顺序不对?如何解决此错误?为什么我的地图按这个顺序有 Field2 = Value2, Field1 = Value1 ?

4

1 回答 1

11

因为它是哈希映射,你怎么能期望订单检索,如果想要订单检索请实现你自己的 ResultTransformer 它将返回 LinkedHashMap 例如

public class AliasToEntityOrderedMapResultTransformer extends AliasedTupleSubsetResultTransformer {

public static final AliasToEntityOrderedMapResultTransformer INSTANCE = new AliasToEntityOrderedMapResultTransformer();

/**
 * Disallow instantiation of AliasToEntityOrderedMapResultTransformer .
 */
private AliasToEntityOrderedMapResultTransformer () {
}

/**
 * {@inheritDoc}
 */
public Object transformTuple(Object[] tuple, String[] aliases) {
            /* please note here LinkedHashMap is used so hopefully u ll get ordered key */
    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;
}

/**
 * {@inheritDoc}
 */
public boolean isTransformedValueATupleElement(String[] aliases, int tupleLength) {
    return false;
}

/**
 * Serialization hook for ensuring singleton uniqueing.
 *
 * @return The singleton instance : {@link #INSTANCE}
 */
private Object readResolve() {
    return INSTANCE;
}
}

顺便说一句,您的逻辑不应该取决于它出现在结果映射中的键的顺序。

于 2013-05-23T08:29:33.887 回答