Error querying database. Cause: java.lang.UnsupportedOperationExceptio
本日写代码的时候碰到一个非常傻的错误,代码目的:是在一个表里,通过subject_id来分类查找学科详情,正确返回如下:https://i-blog.csdnimg.cn/blog_migrate/ca6a6fe472d47cb2db8366f032d86a3f.png
表布局如下:
https://i-blog.csdnimg.cn/blog_migrate/ea4dd13b1d421fbace9afd4483ed3b6f.png
原因如下
题目:
第一应该返回次数是2,
https://i-blog.csdnimg.cn/blog_migrate/763d8d5a22efcfecd4769281cc513e89.png
但是只执行了一次subject_id=3,并且报了一个null空异常,非常的希奇
https://i-blog.csdnimg.cn/blog_migrate/b3858adebd360c686ed88d3e92374259.png
错误log:
Caused by: org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.UnsupportedOperationException
### The error may exist in file
### The error may involve com.hucais.infra.mapper.KnowledgeCategoryMapper.selectName
### The error occurred while handling results
### SQL: select category_name from customized_knowledge_category where subject_id = ?
### Cause: java.lang.UnsupportedOperationException
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) ~
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:149) ~
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) ~
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~
at java.lang.reflect.Method.invoke(Method.java:498) ~
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) ~
... 155 common frames omitted
Caused by: java.lang.UnsupportedOperationException: null
at org.apache.ibatis.reflection.wrapper.CollectionWrapper.findProperty(CollectionWrapper.java:48) ~
at org.apache.ibatis.reflection.MetaObject.findProperty(MetaObject.java:85) ~
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createAutomaticMappings(DefaultResultSetHandler.java:549) ~
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyAutomaticMappings(DefaultResultSetHandler.java:573) ~
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:392) ~
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:344) ~
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:318) ~
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:291) ~
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:184) ~
at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:65) ~
at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79) ~
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63) ~
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325) ~
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) ~
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) ~
at org.apache.ibatis.executor.loader.ResultLoader.selectList(ResultLoader.java:81) ~
at org.apache.ibatis.executor.loader.ResultLoader.loadResult(ResultLoader.java:70) ~
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getNestedQueryMappingValue(DefaultResultSetHandler.java:816) ~
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getPropertyMappingValue(DefaultResultSetHandler.java:521) ~
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyPropertyMappings(DefaultResultSetHandler.java:497) ~
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:394) ~
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:344) ~
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:318) ~
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:291) ~
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:184) ~
at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:65) ~
at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79) ~
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63) ~
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325) ~
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) ~
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) ~
at sun.reflect.GeneratedMethodAccessor139.invoke(Unknown Source) ~
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~
at java.lang.reflect.Method.invoke(Method.java:498) ~
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~
at org.hzero.boot.platform.data.permission.handler.DataCacheResultHandler.intercept(DataCacheResultHandler.java:79) ~
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~
at com.sun.proxy.$Proxy465.query(Unknown Source) ~
at sun.reflect.GeneratedMethodAccessor139.invoke(Unknown Source) ~
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~
at java.lang.reflect.Method.invoke(Method.java:498) ~
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63) ~
at com.sun.proxy.$Proxy465.query(Unknown Source) ~
at sun.reflect.GeneratedMethodAccessor139.invoke(Unknown Source) ~
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~
at java.lang.reflect.Method.invoke(Method.java:498) ~
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~
at org.hzero.mybatis.parser.SqlParserInterceptor.intercept(SqlParserInterceptor.java:117) ~
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~
at com.sun.proxy.$Proxy465.query(Unknown Source) ~
at sun.reflect.GeneratedMethodAccessor139.invoke(Unknown Source) ~
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~
at java.lang.reflect.Method.invoke(Method.java:498) ~
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~
at org.hzero.mybatis.security.DataSecurityInterceptor.intercept(DataSecurityInterceptor.java:87) ~
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~
at com.sun.proxy.$Proxy465.query(Unknown Source) ~
at sun.reflect.GeneratedMethodAccessor139.invoke(Unknown Source) ~
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~
at java.lang.reflect.Method.invoke(Method.java:498) ~
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~
at org.hzero.mybatis.security.SecurityTokenInterceptor.intercept(SecurityTokenInterceptor.java:36) ~
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~
at com.sun.proxy.$Proxy465.query(Unknown Source) ~
at sun.reflect.GeneratedMethodAccessor139.invoke(Unknown Source) ~
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~
at java.lang.reflect.Method.invoke(Method.java:498) ~
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~
at org.hzero.mybatis.security.CrossSchemaInterceptor.intercept(CrossSchemaInterceptor.java:74) ~
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~
at com.sun.proxy.$Proxy465.query(Unknown Source) ~
at io.choerodon.mybatis.pagehelper.PageInterceptor$DoPage.invoke(PageInterceptor.java:255) ~
at io.choerodon.mybatis.pagehelper.PageInterceptor.intercept(PageInterceptor.java:173) ~
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~
at com.sun.proxy.$Proxy465.query(Unknown Source) ~
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~
at java.lang.reflect.Method.invoke(Method.java:498) ~
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~
at org.hzero.boot.platform.lov.fuzzy.LovSearchSqlInterceptor.intercept(LovSearchSqlInterceptor.java:42) ~
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~
at com.sun.proxy.$Proxy465.query(Unknown Source) ~
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) ~
... 161 common frames omitted
VO代码 :
@Id
@GeneratedValue
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
@NotNull
private String subjectId;
private String subjectIdMeaning;
private Integer status;
private String statusMeaning;
@NotBlank
private List<String> categoryName;mapper.xml代码:
<sql id = "BaseSql">
ckc.id,
ckc.subject_id,
ckc.tenant_id,
ckc.category_name,
ckc.status,
ckc.delete_flag,
ckc.creation_date,
ckc.created_by,
ckc.last_updated_by,
ckc.last_update_date,
ckc.object_version_number
</sql>
<resultMap id="selectListVOMap" type="com.hucais.api.vo.KnowledgeCategoryListVO" autoMapping="true">
<id property="id" column="id" />
<result property="subjectId" column="subject_id"/>
<collection property="categoryName" ofType="arraylist"
select="selectName" column="subject_id" autoMapping="true">
</collection>
</resultMap>
<select id="selectName" resultType="arraylist">
select category_name from customized_knowledge_category where subject_id = #{subjectId}
</select>
<select id="selectListVO" resultMap="selectListVOMap">
select
<include refid="BaseSql" />
from customized_knowledge_category ckc
<where>
and ckc.delete_flag = 0
<if test="categoryName != null">
and ckc.category_name like concat('%',#{categoryName,jdbcType = VARCHAR},'%')
</if>
</where>
group by ckc.subject_id
</select>办理办法:
经过很长时间思考和debug,终于找到原因:https://i-blog.csdnimg.cn/blog_migrate/e8186fdea56474ef5196c1acb48ecc9c.png
竟然是这个resultType类型设置错误,改为String即可
https://i-blog.csdnimg.cn/blog_migrate/92db55e3e3415f7965ff1ac556f902eb.png
,当然这里是要跟你设置的返回类的变量的类型相干,到底是什么原因导致,我的技术太弱没有办法办理,仅仅提供自己的小小办理办法,可能会有所资助!
https://i-blog.csdnimg.cn/blog_migrate/ab970abebabcdca1e21d6c0657ecf18e.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]