spring-boot-starter-data-redis从3.1升级到3.2时出现“data.mapping.Parameter没有名称错误”

问题描述 投票:0回答:2

将 Spring Boot 从 3.1 更新到 3.2 后,我按照说明添加了 Java 编译的 -parameters 标志。尽管如此,我仍然遇到相同的错误,如我收到的堆栈跟踪所示。

**org.springframework.data.mapping.MappingException: Parameter org.springframework.data.mapping.Parameter@57ced0b5 does not have a name**
at org.springframework.data.mapping.model.PersistentEntityParameterValueProvider.getParameterValue(PersistentEntityParameterValueProvider.java:61)
at org.springframework.data.mapping.model.ClassGeneratingEntityInstantiator.extractInvocationArguments(ClassGeneratingEntityInstantiator.java:301)
at org.springframework.data.mapping.model.ClassGeneratingEntityInstantiator$EntityInstantiatorAdapter.createInstance(ClassGeneratingEntityInstantiator.java:273)
at org.springframework.data.mapping.model.ClassGeneratingEntityInstantiator.createInstance(ClassGeneratingEntityInstantiator.java:98)
at org.springframework.data.redis.core.convert.MappingRedisConverter.doReadInternal(MappingRedisConverter.java:222)
at org.springframework.data.redis.core.convert.MappingRedisConverter.readInternal(MappingRedisConverter.java:180)
at org.springframework.data.redis.core.convert.MappingRedisConverter.readCollectionOrArray(MappingRedisConverter.java:818)
at org.springframework.data.redis.core.convert.MappingRedisConverter.readProperty(MappingRedisConverter.java:284)
at org.springframework.data.redis.core.convert.MappingRedisConverter$ConverterAwareParameterValueProvider.getPropertyValue(MappingRedisConverter.java:1092)
at org.springframework.data.redis.core.convert.MappingRedisConverter$ConverterAwareParameterValueProvider.getPropertyValue(MappingRedisConverter.java:1075)
at org.springframework.data.mapping.model.PersistentEntityParameterValueProvider.getParameterValue(PersistentEntityParameterValueProvider.java:71)
at org.springframework.data.mapping.model.ClassGeneratingEntityInstantiator.extractInvocationArguments(ClassGeneratingEntityInstantiator.java:301)
at org.springframework.data.mapping.model.ClassGeneratingEntityInstantiator$EntityInstantiatorAdapter.createInstance(ClassGeneratingEntityInstantiator.java:273)
at org.springframework.data.mapping.model.ClassGeneratingEntityInstantiator.createInstance(ClassGeneratingEntityInstantiator.java:98)
at org.springframework.data.redis.core.convert.MappingRedisConverter.doReadInternal(MappingRedisConverter.java:222)
at org.springframework.data.redis.core.convert.MappingRedisConverter.read(MappingRedisConverter.java:174)
at org.springframework.data.redis.core.convert.MappingRedisConverter.read(MappingRedisConverter.java:105)
at org.springframework.data.redis.core.RedisKeyValueAdapter.get(RedisKeyValueAdapter.java:290)
at org.springframework.data.redis.core.RedisKeyValueAdapter.getAllOf(RedisKeyValueAdapter.java:374)
at org.springframework.data.redis.core.RedisKeyValueAdapter.getAllOf(RedisKeyValueAdapter.java:341)
at org.springframework.data.keyvalue.core.KeyValueTemplate.lambda$findAll$2(KeyValueTemplate.java:216)
at org.springframework.data.keyvalue.core.KeyValueTemplate.execute(KeyValueTemplate.java:314)
at org.springframework.data.keyvalue.core.KeyValueTemplate.executeRequired(KeyValueTemplate.java:329)
at org.springframework.data.keyvalue.core.KeyValueTemplate.findAll(KeyValueTemplate.java:214)
at org.springframework.data.keyvalue.repository.support.SimpleKeyValueRepository.findAll(SimpleKeyValueRepository.java:108)
at org.springframework.data.keyvalue.repository.support.SimpleKeyValueRepository.findAll(SimpleKeyValueRepository.java:42)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:352)
at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:277)
at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:170)
at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:158)
at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:516)
at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:628)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:168)
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:143)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:249)
**at jdk.proxy3/jdk.proxy3.$Proxy157.findAll(Unknown Source)**
java spring spring-boot spring-data-redis
2个回答
0
投票

尝试在出现此错误的 POJO 上添加 @AllArgsConstructor 或 @RequiredArgsConstructor。那就应该解决了。


0
投票

Spring Data 更新由于参数名称保留而导致此异常:“...Spring 框架和 Spring 组合框架中的代码不再尝试通过解析字节码来推断参数名称”。

向相关实体添加

@NoArgsConstructor
会有所帮助,因为 “...如果一个实体包含在另一个包中定义的某种类型的字段,并且该对象不提供空构造函数(私有、受保护或公共),则在读取操作期间将引发映射异常”( Spring Data MongoDb 问题).

如果没有机会这样做,您可以添加编译器参数(参见这个问题)。然而,使用这种方法存在一定的暴露敏感信息的风险,详细信息请参阅此案例研究

© www.soinside.com 2019 - 2024. All rights reserved.