首页 > 解决方案 > Mariadb客户端jar在删除一行时抛出ArrayIndexoutofbounds异常

问题描述

我使用 mariadb 作为我的 ORM。我正在使用 jpa 的表中使用主键删除一行。这是一个简单的本机删除查询。看起来如果匹配行不存在,结果集处理就有这个问题。但是,这种行为是不一致的,并不经常发生。

@Query(value ="Delete from table where id = :paramId",nativeQuery =true)

 java.lang.ArrayIndexOutOfBoundsException: null
at org.mariadb.jdbc.internal.com.read.Buffer.getLengthEncodedBytes(Buffer.java:318) ~[mariadb-java-client-2.2.0.jar!/:na]
at org.mariadb.jdbc.internal.com.read.resultset.ColumnInformation.getString(ColumnInformation.java:242) ~[mariadb-java-client-2.2.0.jar!/:na]
at org.mariadb.jdbc.internal.com.read.resultset.ColumnInformation.getName(ColumnInformation.java:258) ~[mariadb-java-client-2.2.0.jar!/:na]
at org.mariadb.jdbc.MariaDbResultSetMetaData.getColumnLabel(MariaDbResultSetMetaData.java:187) ~[mariadb-java-client-2.2.0.jar!/:na]
at org.hibernate.dialect.ColumnAliasExtractor$1.extractColumnAlias(ColumnAliasExtractor.java:39) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
at org.hibernate.loader.custom.JdbcResultMetadata.getColumnName(JdbcResultMetadata.java:59) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
at org.hibernate.loader.custom.ScalarResultColumnProcessor.performDiscovery(ScalarResultColumnProcessor.java:39) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:487) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
at org.hibernate.loader.Loader.getResultSet(Loader.java:2125) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1900) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1876) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
at org.hibernate.loader.Loader.doQuery(Loader.java:919) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:336) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
at org.hibernate.loader.Loader.doList(Loader.java:2617) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
at org.hibernate.loader.Loader.doList(Loader.java:2600) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2429) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
at org.hibernate.loader.Loader.list(Loader.java:2424) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:336) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:1967) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
at org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:322) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:125) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:606) ~[hibernate-entitymanager-5.0.12.Final.jar!/:5.0.12.Final]
at org.hibernate.jpa.internal.QueryImpl.getSingleResult(QueryImpl.java:529) ~[hibernate-entitymanager-5.0.12.Final.jar!/:5.0.12.Final]

表结构: CREATE TABLE inst( INST_IDINT(11) NOT NULL AUTO_INCREMENT, STATUS_IDSMALLINT(6) NULL DEFAULT NULL, MODULE_IDSMALLINT(6) NULL DEFAULT '2', STAGE_CONFIG_IDMEDIUMINT(9) NULL DEFAULT NULL, COMMENTSVARCHAR(1000) NULL DEFAULT NULL, IS_LOCKEDVARCHAR( 1) NULL DEFAULT NULL, LOCKED_BYVARCHAR(100) NULL DEFAULT NULL, RECORD_DATEDATETIME(6) NOT NULL, VERSIONINT(11) NULL 默认NULL, ROLE_IDMEDIUMINT(9) NULL 默认NULL, 主键( INST_ID), 唯一索引INST_PK( INST_ID), 索引INST_MODULE_FK( MODULE_ID) , INDEX INST_WKF_STAGE_CONFIG_FK1( STAGE_CONFIG_ID), INDEX INST_ID( INST_ID, STAGE_CONFIG_ID), 约束外INST_MODULE_FK键 ( MODULE_ID) 引用module( MODULE_ID), 约束外INST_WKF_STAGE_CONFIG_FK1键 ( STAGE_CONFIG_ID) 引用stage_config( STAGE_CONFIG_ID) )

标签: hibernatejava-8spring-data-jpamariadb

解决方案


推荐阅读