java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.

现象:
liferay中查询数据,用到如下语句 select xx from yyy where .....;

原因:
只select一个字段

解决思路:

1. 类型转换, 尝试biginteger, object 等等均不可行,转成object都不可以,此路不通。

2. SELECT XXX AS COUNT_VALUE from yyy where ..... 
(COUNT_VALUE 是liferay定义的关键字)

3. SELECT XXX , ZZZ FROM yyyy where ......
  select 多于一个字段就可以正常操作,不会报转换异常

具体代码:

2.
红色字体根据实际情况改变
Session session = null;
try {
session = openSession();
StringBuffer sql = new StringBuffer("");

sql.append(" SELECT xxx AS COUNT_VALUE ");
...................
SQLQuery q = session.createSQLQuery(sql.toString());

q.addScalar(COUNT_COLUMN_NAME, Type.DOUBLE);
QueryPos qPos = QueryPos.getInstance(q);
qPos.add(ZZZZ);

Iterator<Double> itr = q.list().iterator();

if (itr.hasNext()) {
Double count = itr.next();

if (count != null) {
amount = count.doubleValue();
}
}
return amount;
} catch (Exception e) {
throw new SystemException(e);
} finally {
closeSession(session);
}
3.


try {
session = openSession();
StringBuffer sql = new StringBuffer("");
..............
SQLQuery q = session.createSQLQuery(sql.toString());

QueryPos qPos = QueryPos.getInstance(q);

qPos.add(voyageIDPre);
List list = QueryUtil.list(q, getDialect(), 0, Integer.MAX_VALUE);
List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
//need check : list is not null
for (int i = 0; i < list.size(); i++) {
Map<String, Object> map = new HashMap<String, Object>();
Object[] record = (Object[]) list.get(i);
map.put("xxx", record[0] == null? "" : record[0]);
map.put("yyyy", record[1] == null? "" : record[1]);
map.put("yyyy", record[6] == null? "" : record[6]);
result.add(map);
}
return result;
} catch (Exception e) {
throw new SystemException(e);
} finally {
closeSession(session);
}

猜你喜欢

转载自likaidalian.iteye.com/blog/1701566