return query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).getResultList();
返回的map是无序的,查询HashMap和LinkedHashMap。
重写Transformer:
public class MyAliasedTupleSubsetResultTransformer extends AliasedTupleSubsetResultTransformer {
public static final MyAliasedTupleSubsetResultTransformer INSTANCE = new MyAliasedTupleSubsetResultTransformer();
/**
* Disallow instantiation of AliasToEntityMapResultTransformer.
*/
private MyAliasedTupleSubsetResultTransformer() {
}
@Override
public Object transformTuple(Object[] tuple, String[] aliases) {
LinkedHashMap 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;
}
@Override
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;
}
}
将 Map result = new HashMap(tuple.length);
改为有序的
LinkedHashMap result = new LinkedHashMap(tuple.length);
在代码中使用:
return query.unwrap(NativeQueryImpl.class).setResultTransformer(MyAliasedTupleSubsetResultTransformer.INSTANCE).getResultList();
完毕!
文章讲述了在JPA查询中,如何通过重写ResultTransformer来确保返回的Map结果是有序的。具体做法是创建一个名为MyAliasedTupleSubsetResultTransformer的类,继承自AliasedTupleSubsetResultTransformer,并在transformTuple方法中使用LinkedHashMap保证顺序,然后在查询时设置这个自定义的ResultTransformer。

5252

被折叠的 条评论
为什么被折叠?



