Error querying database. Cause: java.lang.reflect.InaccessibleObjectException:

news2024/9/23 7:25:13

最近开发过程中,居然碰到了一个Arrays.asList的错,怎么个场景呢?传参一个用固定符号拼接的字符串,需要转成集合然后再myBatis里in判断。然后就报错了。

一、代码层面

service层面:

shortDetailUrlList = Arrays.asList(params.getShortDetailUrl().split("-"));

mybatis层面:

<if test="shortDetailUrlList != null and shortDetailUrlList.size() > 0">
            and tcp.short_url in
            <foreach item="shortDetailUrl" collection="shortDetailUrlList" open="(" separator="," close=")"
                     index="index">
                #{shortDetailUrl}
            </foreach>
        </if>

二、错误日志

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.lang.reflect.InaccessibleObjectException: Unable to make public int java.util.Arrays$ArrayList.size() accessible: module java.base does not "opens java.util" to unnamed module @65e579dc
### Cause: java.lang.reflect.InaccessibleObjectException: Unable to make public int java.util.Arrays$ArrayList.size() accessible: module java.base does not "opens java.util" to unnamed module @65e579dc
	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:96)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)
	at jdk.proxy2/jdk.proxy2.$Proxy103.selectList(Unknown Source)
	at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)
	at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:147)
	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:80)
	at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:145)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86)
	at jdk.proxy2/jdk.proxy2.$Proxy152.getConstructInfoByReceiveId(Unknown Source)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
	at java.base/java.lang.reflect.Method.invoke(Method.java:577)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
	at jdk.proxy2/jdk.proxy2.$Proxy153.getConstructInfoByReceiveId(Unknown Source)
	at com.meta.image.admin.service.impl.ReportBaseServiceImpl.getReportConstructInfo(ReportBaseServiceImpl.java:389)
	at com.meta.image.admin.controller.ReportBaseV2Controller.getReportConstructInfo(ReportBaseV2Controller.java:75)
	at com.meta.image.admin.controller.ReportBaseV2Controller$$FastClassBySpringCGLIB$$b659f1a1.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)
	at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)

三、日志分析

根据错误日志可以晓得:数据库报错了,然后还是反射的错。错误的根源就是:

Unable to make public int java.util.Arrays$ArrayList.size() accessible

那这错误的根源到底是什么呢?那还得从Array.asList分析入手啊。。。

四、Array.asList的坑

1、使用场景

一般我们字符串切割,很容易想到额就是它了,固定符号分割,获取一个集合列表。

【注意】:

	- 该方法适用于对象型数据的数组(String、Integer…)
	- 该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean)
	- 该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新
	- 不支持add()、remove()、clear()等方法

2、为何说是一个坑?

① :此方法得到的List的长度是不可改变的(看源码就会一目了然)

当你向这个List添加或删除一个元素时(例如 list.add(“d”);)程序就会抛出异尝(java.lang.UnsupportedOperationException)。

public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }

    /**
     * @serial include
     */
    private static class ArrayList<E> extends AbstractList<E>
        implements RandomAccess, java.io.Serializable
    {
        private static final long serialVersionUID = -2764017481108945198L;
        private final E[] a;

        ArrayList(E[] array) {
            a = Objects.requireNonNull(array);
        }
    

看源码你就会发现,每次调用asList,都是new一个新的,来操作增删。

②:虽然也是集合,但是确实内部类,和我们所用的java.util.arrayList是不一样的

在这里插入图片描述
在这里插入图片描述
回到第三点,为何会报反射异常,因为内部类,mybatis去获取size的时候,是获取不到的。解决办法也有很多种。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1249000.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言——从终端(键盘)读入 20 个数据到数组中,统计其中正数的个数,并计算这些正数之和

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i0;int sum0;int count0;int arr[20];printf("输入20个数据&#xff1a;\n");for(i1;i<20;i){scanf("%d",&arr[i]);if(arr[i]>0){count;sumarr[i];}}printf("正…

文献速递:非专业任务医生在审查X光片时受益于正确的可解释人工智能建议

非专业任务医生在审查X光片时受益于正确的可解释人工智能建议 01****文献速递介绍 本文主要探讨了人工智能&#xff08;AI&#xff09;在放射学中的应用&#xff0c;特别是在胸部X光片的诊断中AI临床决策支持系统&#xff08;AI-CDSS&#xff09;的作用。研究发现&#xff0c…

Websocket “未完成操作“与真机报错 问题

关于弱小又无助的小前端开发工程师的经历分享&#xff1a; 在用uniapp开发微信小程序的过程中&#xff0c;需要使用websocket进行数据的传输&#xff0c;在开发过程中没有任何的问题&#xff0c;但是进入生产环境时&#xff0c;真的是三路十八弯&#xff0c;让小前端尝遍了微信…

起动电流小,工作频率 可达500kHz的Dc-Dc开关电源芯片B3842芯片描述

B3842/43/44是专为脱线和Dc-Dc开关电源应用设计的恒频电流型Pwd控制器内部包含温度补偿精密基准、供精密占空比调节用的可调振荡器、高增益混放大器、电流传感比较器和适合作功率MOST驱动用的大电流推挽输出颇以及单周期徊滞式限流欠压锁定、死区可调、单脉冲计数拴锁等保护电路…

JAVA序列化和反序列化

JAVA序列化和反序列化 文章目录 JAVA序列化和反序列化序列化什么是序列化&#xff1f;为什么要进行序列化?如何将对线进行序列化具体实现过程 完整代码 序列化 什么是序列化&#xff1f; 就是将对象转化为字节的过程 为什么要进行序列化? 让数据更高效的传输让数据更好的…

“AI就绪”新计划,亚马逊云科技到2025年向200万人提供免费AI技能培训

AI就绪&#xff08;AI Ready&#xff09;计划 到2025年为全球200万人提供 免费人工智能&#xff08;AI&#xff09;技能培训和教育资源 亚马逊云科技宣布启动“AI就绪&#xff08;AI Ready&#xff09;”计划&#xff0c;旨在到2025年为全球200万人提供免费人工智能&#xff08…

自动化测试中几种常见验证码的处理方式及如何实现?

UI自动化测试时&#xff0c;需要对验证码进行识别处理&#xff0c;有很多方式&#xff0c;每种方式都有自己的特点&#xff0c;以下是一些常用处理方法&#xff0c;仅供参考。 1 去掉验证码 从自动化的本质上来讲&#xff0c;主要是提升测试效率等&#xff0c;但是为了去研究验…

新手如何买卖可转债,可转债投资基础入门

一、教程描述 什么是可转债&#xff1f;可转债是可转换债券的二次简称&#xff0c;原始全称是可转换公司债券&#xff0c;这是一种可以在特定时间、按特定条件&#xff0c;转换为普通股票的特殊企业债券&#xff0c;可转换债券兼具债权和股权的特征&#xff0c;其英文为conver…

AMESim|Make failed:Unable to create an excutable for the system

最近在AMESIM与MATLAB进行联合仿真的时候遇到如下问题&#xff1a; Make failed:Unable to create an excutable for the system. 看了网上的解决办法如下 配置环境变量重装AMESIM&#xff0c;有顺序要求&#xff0c;首先是VS&#xff0c;然后是AMESIM与MATLAB。在AMESIM安装…

PDF 批量处理软件BatchOutput PDF mac中文版介绍

BatchOutput PDF mac是一款适用于 Mac 的 PDF 批量处理软件。它可以帮助用户将多个 PDF 文件进行异步处理&#xff0c;提高工作效率。 BatchOutput PDF 可以自动化执行许多任务&#xff0c;包括 PDF 文件的打印、转换、分割、压缩、加密、重命名等&#xff0c;而且它还可以将自…

5-11一个球从100米自由落下

#include<stdio.h> int main(){double down100;double back down/2;int n;//次数for(n2;n<10;n){downdownback*2;backback/2; }printf("第10次落地经过%f米\n",down);printf("第10次反弹%f米\n",back);return 0;}

视频直播美颜SDK对比测评,技术深度剖析

美颜滤镜作为直播体验的关键一环&#xff0c;成为直播平台竞争的焦点。在美颜滤镜的背后&#xff0c;不同的视频直播美颜SDK各有千秋&#xff0c;下文&#xff0c;小编将对几个主要的视频直播美颜SDK进行对比测评&#xff0c;并深度剖析其技术特点。 一、美颜SDK简介 首先&a…

做嵌入式(/单片机/ARM)底层开发普遍待遇是怎样的?

做嵌入式&#xff08;/单片机/ARM&#xff09;底层开发普遍待遇是怎样的&#xff1f;北京&#xff0c;成都待遇分别怎样&#xff1f; 嵌入式系统方向的工作就是设计嵌入式设备的集成和配套&#xff0c;包括硬件设备和运行其上的控制软件&#xff0c;硬件设备就包括如单片机、MC…

IIC驱动OLED(SSD1306) HAL库+CubeMX

一.IIC传输数据的格式 1.写操作 2.读操作 3.IIC信号 二. IIC底层驱动 1.重新初始化配置延时单元 //软件延时 void I2C_Delay(uint32_t t) {volatile uint32_t tmp t;while(tmp--); }void I2C_GPIO_ReInit(void) {/* 1. 使用结构体定义硬件GPIO对象 */GPIO_InitTypeDef GPIO…

python+pytest接口自动化-requests发送post请求

简介 在HTTP协议中&#xff0c;与get请求把请求参数直接放在url中不同&#xff0c;post请求的请求数据需通过消息主体(request body)中传递。 且协议中并没有规定post请求的请求数据必须使用什么样的编码方式&#xff0c;所以其请求数据可以有不同的编码方式&#xff0c;服务…

Linux的基本指令(3)

16.cal指令 cal命令可以用来显示公历&#xff08;阳历&#xff09;日历。公历是现在国际通用的历法&#xff0c;又称格列历&#xff0c;通称阳历。“阳历”又名“太阳历”&#xff0c;系以地球绕行太阳一周为一年&#xff0c;为西方各国所通用&#xff0c;故又名“西历”。 命…

手动创建映像及在OpenStack云计算平台的镜像应用

目录 一、下载 rhel7.6 安装ISO 二、在VMware 的虚拟机内创建虚拟机 三、更改一些设置 1、使用httpd暴露&#xff08;在外部虚拟机&#xff09; 2、添加软件仓库 3、 安装 ACPI 服务 4、使用 cloud-init 获取公钥 5、安装 cloud-utils-growpart 以允许调整分区大小 6、…

H5游戏和小程序游戏的区别是什么,分别有什么优势?

H5游戏和小程序游戏都是基于互联网的游戏形式&#xff0c;但它们在技术实现、发布平台和用户体验等方面存在一些区别。 技术实现&#xff1a; H5游戏&#xff1a; 使用HTML5、CSS3、JavaScript等Web技术进行开发。这意味着玩家可以通过任何支持Web浏览器的设备访问游戏&#…

CAD随机多面体_圆柱试件3D插件

插件介绍 CAD随机多面体_圆柱试件3D插件可用于在AutoCAD软件内生成随机三维多面体及外侧圆柱体试件。插件可确保多面体之间不发生干涉&#xff0c;且多面体与外侧圆柱体试件之间保持适配关系&#xff0c;确保生成的模型导入有限元软件后几何合理有效。本插件主要可应用于三维混…

对 .NET程序2G虚拟地址紧张崩溃 的最后一次反思

一&#xff1a;背景 1. 讲故事 最近接连遇到了几起 2G 虚拟地址紧张 导致的程序崩溃&#xff0c;基本上 90% 都集中在医疗行业&#xff0c;真的很无语&#xff0c;他们用的都是一些上古的 XP&#xff0c;Windows7 x86&#xff0c;我也知道技术人很难也基本无法推动硬件系统和…