-
Notifications
You must be signed in to change notification settings - Fork 377
Closed as duplicate of#5101
Labels
for: external-projectFor an external project and not something we can fixFor an external project and not something we can fix
Description
Converting my app to Spring Boot 4, it runs as a native app and uses Spring Data JDBC so it's using the new aot repositories. I get some weird behaviour on a particular boolean field, it's boolean in the database, boolean in the object but something wants to play the Integer game.
I've created a minimal sample app that shows the issue. App will run fine in the IDE but a ./gradlew nativeRun will/should generate a stack trace like this one below. I run against postgres so you'll need a db called aottest with a user of the same name.
This seemed like a sensible project to report to but let me know if I've got the wrong one.
java.lang.IllegalArgumentException: Can not set boolean field com.example.demo.SheetsUser.enabled to java.lang.Integer
at org.graalvm.nativeimage.builder/com.oracle.svm.core.reflect.fieldaccessor.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:266)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.reflect.fieldaccessor.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:270)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.reflect.fieldaccessor.UnsafeBooleanFieldAccessorImpl.set(UnsafeBooleanFieldAccessorImpl.java:95)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.methodhandles.Util_java_lang_invoke_MethodHandle.invokeInternal(Target_java_lang_invoke_MethodHandle.java:207)
at java.base@25.0.1/java.lang.invoke.MethodHandle.invokeBasic(MethodHandle.java:102)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.methodhandles.MethodHandleIntrinsicImpl.execute(MethodHandleIntrinsicImpl.java:179)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.methodhandles.Util_java_lang_invoke_MethodHandle.invokeInternal(Target_java_lang_invoke_MethodHandle.java:186)
at java.base@25.0.1/java.lang.invoke.MethodHandle.invokeBasic(MethodHandle.java:102)
at java.base@25.0.1/java.lang.invoke.LambdaForm$NamedFunction.invokeWithArguments(LambdaForm.java:96)
at java.base@25.0.1/java.lang.invoke.LambdaForm.interpretName(LambdaForm.java:914)
at java.base@25.0.1/java.lang.invoke.LambdaForm.interpretWithArguments(LambdaForm.java:891)
at java.base@25.0.1/java.lang.invoke.MethodHandle.invokeBasic(MethodHandle.java:109)
at java.base@25.0.1/java.lang.invoke.MethodHandle.invokeBasic(MethodHandle.java:0)
at java.base@25.0.1/java.lang.invoke.LambdaForm$MH/sa9cc65ae.invoke_MT(LambdaForm$MH)
at com.example.demo.SheetsUser__Accessor_x7mayh.setProperty(Unknown Source)
at org.springframework.data.mapping.model.InstantiationAwarePropertyAccessor.setProperty(InstantiationAwarePropertyAccessor.java:81)
at org.springframework.data.mapping.model.ConvertingPropertyAccessor.setProperty(ConvertingPropertyAccessor.java:62)
at org.springframework.data.relational.core.conversion.MappingRelationalConverter.readProperties(MappingRelationalConverter.java:587)
at org.springframework.data.relational.core.conversion.MappingRelationalConverter.populateProperties(MappingRelationalConverter.java:551)
at org.springframework.data.relational.core.conversion.MappingRelationalConverter.read(MappingRelationalConverter.java:487)
at org.springframework.data.relational.core.conversion.MappingRelationalConverter.readAggregate(MappingRelationalConverter.java:376)
at org.springframework.data.relational.core.conversion.MappingRelationalConverter.readAggregate(MappingRelationalConverter.java:334)
at org.springframework.data.jdbc.core.convert.MappingJdbcConverter.readAndResolve(MappingJdbcConverter.java:352)
at org.springframework.data.jdbc.core.convert.EntityRowMapper.mapRow(EntityRowMapper.java:65)
at org.springframework.data.jdbc.core.JdbcAggregateTemplate$LifecycleEntityRowMapper.mapRow(JdbcAggregateTemplate.java:778)
at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:110)
at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:62)
at org.springframework.jdbc.core.JdbcTemplate.lambda$query$0(JdbcTemplate.java:738)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:669)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:731)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:751)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:803)
at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.query(NamedParameterJdbcTemplate.java:224)
at org.springframework.data.jdbc.repository.aot.AotRepositoryFragmentSupport.queryForObject(AotRepositoryFragmentSupport.java:141)
at com.example.demo.SheetsUserRepositoryImpl__AotRepository.lambda$findOneByUsername$0(SheetsUserRepositoryImpl__AotRepository.java:60)
at org.springframework.data.jdbc.repository.query.StatementFactory$SelectionBuilder.executeWith(StatementFactory.java:189)
at com.example.demo.SheetsUserRepositoryImpl__AotRepository.findOneByUsername(SheetsUserRepositoryImpl__AotRepository.java:60)
at java.base@25.0.1/java.lang.reflect.Method.invoke(Method.java:565)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359)
at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:278)
at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:169)
at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:158)
at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:545)
at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:290)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:708)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:171)
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:146)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:370)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:135)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:222)
at jdk.proxy4/jdk.proxy4.$Proxy/s510da763.findOneByUsername(Unknown Source)
at com.example.demo.DemoAppRunner.run(DemoAppRunner.java:21)
at org.springframework.boot.SpringApplication.lambda$callRunner$1(SpringApplication.java:801)
at org.springframework.util.function.ThrowingConsumer$1.acceptWithException(ThrowingConsumer.java:82)
at org.springframework.util.function.ThrowingConsumer.accept(ThrowingConsumer.java:60)
at org.springframework.util.function.ThrowingConsumer$1.accept(ThrowingConsumer.java:86)
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:809)
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:800)
at org.springframework.boot.SpringApplication.lambda$callRunners$0(SpringApplication.java:785)
at java.base@25.0.1/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:186)
at java.base@25.0.1/java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357)
at java.base@25.0.1/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:571)
at java.base@25.0.1/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560)
at java.base@25.0.1/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:153)
at java.base@25.0.1/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:176)
at java.base@25.0.1/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265)
at java.base@25.0.1/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:632)
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:785)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:328)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1374)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363)
at com.example.demo.DemoApplication.main(DemoApplication.java:10)
at java.base@25.0.1/java.lang.invoke.LambdaForm$DMH/sa346b79c.invokeStaticInit(LambdaForm$DMH)
Metadata
Metadata
Assignees
Labels
for: external-projectFor an external project and not something we can fixFor an external project and not something we can fix