如何获得一个订单地图与AliasToEntityMapResultTransformer? [英] How to get an order Map wih 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屋!