为什么JPA/Hibernate会抛掷;java.lang.NegativeArraySizeException:-1;当我尝试运行@Query时?
我有以下代码为什么JPA/Hibernate会抛掷;java.lang.NegativeArraySizeException:-1;当我尝试运行@Query时?,java,hibernate,jpa,spring-data-jpa,Java,Hibernate,Jpa,Spring Data Jpa,我有以下代码 @Query( value = "call schema.pkg.UPDATE(?1)", nativeQuery = true ) void addRecords(String ids); @Autowired MyRepository repo; repo.addRecords(records); 我得到 java.lang.NegativeArraySizeException: -1 at org.hiber
@Query(
value = "call schema.pkg.UPDATE(?1)",
nativeQuery = true
)
void addRecords(String ids);
@Autowired
MyRepository repo;
repo.addRecords(records);
我得到
java.lang.NegativeArraySizeException: -1
at org.hibernate.loader.custom.ResultRowProcessor.prepareForAutoDiscovery(ResultRowProcessor.java:36)
at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:489)
at org.hibernate.loader.Loader.preprocessResultSet(Loader.java:2357)
at org.hibernate.loader.Loader.getResultSet(Loader.java:2313)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2064)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2026)
at org.hibernate.loader.Loader.doQuery(Loader.java:951)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:352)
at org.hibernate.loader.Loader.doList(Loader.java:2857)
at org.hibernate.loader.Loader.doList(Loader.java:2839)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2671)
at org.hibernate.loader.Loader.list(Loader.java:2666)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:338)
at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:2139)
at org.hibernate.internal.AbstractSharedSessionContract.list(AbstractSharedSessionContract.java:1163)
at org.hibernate.query.internal.NativeQueryImpl.doList(NativeQueryImpl.java:173)
at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1533)
at org.hibernate.query.internal.AbstractProducedQuery.getSingleResult(AbstractProducedQuery.java:1581)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.springframework.orm.jpa.SharedEntityManagerCreator$DeferredQueryInvocationHandler.invoke(SharedEntityManagerCreator.java:409)
at com.sun.proxy.$Proxy260.getSingleResult(Unknown Source)
at org.springframework.data.jpa.repository.query.JpaQueryExecution$SingleEntityExecution.doExecute(JpaQueryExecution.java:196)
at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:88)
at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:154)
at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:142)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:619)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:606)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:367)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:149)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
at com.sun.proxy.$Proxy217.addRecords(Unknown Source)
我也试过了
@Query(
value = "call schema.pkg.UPDATE(:ids)",
nativeQuery = true
)
void addRecords(@Param("ids") String ids);
字符串的示例为1,2,3,4
更新
存储的进程定义
PROCEDURE UPDATE ( MY_IDS in varchar2)
您需要使用
@过程
注释:
@Procedure("schema.pkg.UPDATE")
void addRecords(String ids);
编辑(感谢@JGleason)
可能需要命名参数
@Procedure("schma.pkg.UPDATE")
void addRecords(@Param("MY_IDS") String ids);
请参见什么是
schema.pkg.UPDATE
以及它接受什么?元数据.getColumnCount()
出于某种原因返回了-1。尝试添加@修改
注释。看起来效果不错。我在“@NamedStoredProcedureQuery”端做了更多配置,所以可能这就是错误最初的来源。我确实有一个不同的名称(我在问题中没有说),所以我的最终结果是@过程(“schma.pkg.UPDATE”)void addRecords(@Param(“MY_id”)字符串id);不过我注意到了一个问题。它适用于我的单个记录,但不适用于我在手动过程调用中发送的逗号列表。我需要提前做一些逃避吗?如果不查看schema.pkg.UPDATE
,很难说,您会遇到什么样的错误?非常感谢您的帮助。让我把一些东西放在一起,我将打开另一个问题并在这里ping它