hibernate 中使用聚合函数 count 查询记录数时,返回值类型为 Long ,若强行转换则会出现 java.lang.ClassCastException 异常,
正确写法应使用 Number 类型作为过渡则不会出错。
错误写法:
@Override
public int findCountByCid(Integer cid) {
String hql = "SELECT count(*) from Product p WHERE p.categorySecond.category.cid = ?";
Query query = getSession().createQuery(hql).setInteger(0, cid);
List<Integer> list = query.list();//返回值类型应为 Long 强行转换 Integer
int result = list.get(0);//调用将会出现异常
return result;
}
更正后:
@Override
public int findCountByCid(Integer cid) {
String hql = "SELECT count(*) from Product p WHERE p.categorySecond.category.cid = ?";
Query query = getSession().createQuery(hql).setInteger(0, cid);
List<Long> list = query.list();//修正部分
int result = ((Number)list.get(0)).intValue();//修正部分
return result;
}