八卦阵 发表于 2024-10-22 21:01:48

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]
查看完整版本: Error querying database. Cause: java.lang.UnsupportedOperationExceptio