线上环境异常:
IllegalArgumentExceptionin class: com.xxx.bean.BrowseRecordVO,
setter method of property: collectionFlag,
Expected type: java.math.BigInteger, actual value: java.lang.Integer
场景: Hibernate把原生sql查询出来的结果集封装成VO对象
SQLQuery sqlQuery = entityManager.createNativeQuery(buffer.toString()).unwrap(SQLQuery.class);
sqlQuery.setParameter(1, userId);
sqlQuery.setParameter(2, curriculumId);
Query query = sqlQuery.setResultTransformer(Transformers.aliasToBean(BrowseRecordVO.class));
讨论
1. 异常很明显:预期接收返回参数为BigInteger,实际接收参数为Integer。
只需要BrowseRecordVO中的collectionFlag属性改为Integer类型就行。
我遇到了一个很坑的问题就是线下数据库collection_flag字段类型为tinyint(1),
但是线上数据库的该字段被修改为了int类型,
导致线上一直出现上述异常,而线下环境测试OK。
# 处理方式:线上数据库字段类型也改为tinyint(1)即可。