JPA 记一次查询封装异常

线上环境异常:

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)即可。 

你可能感兴趣的:(JPA 记一次查询封装异常)