注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

放飞自由

年轻人,如果三年的时间里,没有任何想法,他这一生,就基本这个样子,没有多大改变。

 
 
 

日志

 
 

Hibernate使用addScalar时候出现顺序混乱  

2013-07-12 20:14:21|  分类: JAVA后台 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
开发时用hibernate调用查询方法,用到了addScalar,在传入对象是采用了Map的方式:

错误点:

Map scalar = new HashMap();

scalars.put("q", StandardBasicTypes.INTEGER);
scalars.put("p", StandardBasicTypes.INTEGER);

结果返回结果混乱,以放入的顺序发生错乱,排查后发现HashMap输出前会对存入的值进行排序,可以参考:《LinkedHashMap、HashMap、TreeMap、Hashtable区别与用法》这篇文章。

修改后(采用LinkedHashMap):

Map scalars = new LinkedHashMap();
scalars.put("q", StandardBasicTypes.INTEGER);
scalars.put("p", StandardBasicTypes.INTEGER);


调用方法如下:

public List executeNativeQuery(String sql, Map entities, Map scalars,
Object[] args, Class aliasBean) {

SQLQuery query = getSession().createSQLQuery(sql);
if (entities != null && !entities.isEmpty()) {
Iterator it = entities.keySet().iterator();
while (it.hasNext()) {
String columnAlias = (String) it.next();
Class clazz = (Class) entities.get(columnAlias);
query.addEntity(columnAlias, clazz);
}
}

// 该部分在调用时如果采用new HashMap可能会引起顺序颠倒,所以要采用LinkedHashMap
if (scalars != null && !scalars.isEmpty()) {
Iterator it = scalars.keySet().iterator();
while (it.hasNext()) {
String columnAlias = (String) it.next();
Type type = (Type) scalars.get(columnAlias);
query.addScalar(columnAlias, type);
}
}

if (args != null) {
for (int i = 0; i < args.length; i++) {
query.setParameter(i, args[i]);
}
}

if(null != aliasBean) {
query.setResultTransformer(Transformers
.aliasToBean(aliasBean));
}

List list = new ArrayList();
list = query.list();
return list;
}



  评论这张
 
阅读(708)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017