场景: mysql数据库定义数据类型为bigInt, hibernate映射文件中定义类型为Long,通过hibernate查询出来的确实java.math.BigInteger
private Long id;
private Long projectId;
private Long orgRoleId;
数据库定义类型为bigInt, Mysql数据库
查询:
List> list = this.hibernateTemplate
.execute(new HibernateCallback>>() {
public List> doInHibernate(
Session session) throws HibernateException,
SQLException {
List find = null;
String sql = "select t1.* ,t2.portalItemId as itemId ,t2._column ,t2._row ,t2._order ,t2.orgRoleId ,t2.projectId, t2.workZoneSiteId ,t2.portalItemHeight,t2.portalItemWidth from portal_item as t1,portal_default_workzonesite_item as t2 where t1.status=1 and t1.id=t2.portalItemId and t2.workZoneSiteId='"
+ workZoneSiteId + "'";
SQLQuery query = session.createSQLQuery(sql);
query
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
find = query.list();
return find;
}
});
在得到的list拿出相应原本以为Long类型数据进行Long型转换时抛出Exception:
ClassCastException: cannot cast java.math.BigInteger to java.lang.Long
请问有人遇到过这情况吗,请问发生这种不预期的异常原因在哪?谢谢
问题补充:
@Test
public void getUserPersonalWorkZonesUnderProject() {
List> list = workZoneService
.getUserPersonalWorkZonesUnderProject(projectId, userId);
if(list!=null){
for (Map map : list) {
Set keys = map.keySet();
for (String key : keys) {
log.info("key="+key+", value.class="+map.get(key).getClass());
}
}
}
logInfo(list);
}
这是我针对上面hibernate查询写的test,
结果如下:
[INFO ] [2012-12-17 14:05:16,710] [com.iscreate.plat.portal.test.WorkZoneServiceTest] - key=title, value.class=class java.lang.String
[INFO ] [2012-12-17 14:05:16,710] [com.iscreate.plat.portal.test.WorkZoneServiceTest] - key=visible, value.class=class java.lang.Integer
[INFO ] [2012-12-17 14:05:16,710] [com.iscreate.plat.portal.test.WorkZoneServiceTest] - key=status, value.class=class java.lang.Integer
[INFO ] [2012-12-17 14:05:16,710] [com.iscreate.plat.portal.test.WorkZoneServiceTest] - key=userId, value.class=class java.lang.String
[INFO ] [2012-12-17 14:05:16,710] [com.iscreate.plat.portal.test.WorkZoneServiceTest] - key=_order, value.class=class java.lang.Integer
[INFO ] [2012-12-17 14:05:16,710] [com.iscreate.plat.portal.test.WorkZoneServiceTest] - key=projectId, value.class=class java.math.BigInteger
[INFO ] [2012-12-17 14:05:16,710] [com.iscreate.plat.portal.test.WorkZoneServiceTest] - key=workZoneId, value.class=class java.math.BigInteger
[INFO ] [2012-12-17 14:05:16,710] [com.iscreate.plat.portal.test.WorkZoneServiceTest] - key=zoneName, value.class=class java.lang.String
问题补充:这样的结果只有在放回map结果才出现,返回实体对象不存在类型问题,是不是sql问题呢?还是查询方式引起的?