如何获得一个订单地图与AliasToEntityMapResultTransformer? [英] How to get an order Map wih AliasToEntityMapResultTransformer ?

查看:215
本文介绍了如何获得一个订单地图与AliasToEntityMapResultTransformer?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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



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

解决方案

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

  public class AliasToEntityOrderedMapResultTransformer extends AliasedTupleSubsetResultTransformer {

public static final AliasToEntityOrderedMapResultTransformer INSTANCE = new AliasToEntityOrderedMapResultTransformer();

/ **
*不允许AliasToEntityOrderedMapResultTransformer的实例化。
* /
private AliasToEntityOrderedMapResultTransformer(){
}

/ **
* {@inheritDoc}
* /
公共对象transformTuple(Object []元组,字符串[]别名){
/ *请注意LinkedHashMap用于希望得到有序键* /
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]);
}
}
返回结果;

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

/ **
*确保单身独特性的序列化钩子。
*
* @return单例实例:{@link #INSTANCE}
* /
private Object readResolve(){
return INSTANCE;
}
}

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


I've used this stuff to get a List>, which is very interesting to manipulate datas like a "resultSet". My method is : requeteSQL.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);

When i execute this query with sqldevelopper, i have got for exemple | Field 1 | Field 2 Line 1 | Value 1 | Value 2

But my map is not in the righ order ? How to fix this error ? And why my map have Field2 = Value2, Field1 = Value1 in this order ?

解决方案

because it hash map, how can you expect the order retrieval,if want order retrieval please implement your own ResultTransformer which will return LinkedHashMap e.g.

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;
}
}

by the way your logic should not be depend of the order of keys it appear in resultant map.

这篇关于如何获得一个订单地图与AliasToEntityMapResultTransformer?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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