6.6.x regression - loading a JPA entity a second time when it contains an embedded object causes IllegalArgumentException in reflection code
Description
Attachments
1
- 09 Jan 2025, 09:48 PM
cloned by
Activity
Show:
Vernon Crabtree January 9, 2025 at 10:53 PM
Upgraded to 6.6.0 and I am now seeing this issue too
Robert van Trierum January 9, 2025 at 10:25 PM
Are you able to give this a retake since we are having the same error.
Kai Hackemesser January 9, 2025 at 9:53 PM
Gavin, you have not even reviewed the changes yet.
Rejected
Details
Details
Assignee
Unassigned
UnassignedReporter
Kai Hackemesser
Kai HackemesserLabels
Worked in
Components
Affects versions
Priority
Created January 9, 2025 at 9:44 PM
Updated January 10, 2025 at 1:44 AM
Resolved January 9, 2025 at 9:49 PM
This is a problem we have in our production code when upgrading to Hibernate 6.6.x. In our production code we have some retry logic around some queries if they fail due to parallel accesses. Such a retry loading of an entity fails.
I have constructed a simplified test case which can be found at https://github.com/SchlauFuchs/hibernate-6.6-regression-proof
This test case passes in 6.5.x but fails in 6.6.x with the stack trace:
Can not get com.ourcompany.jpa.Corporation field com.ourcompany.jpa.CorporationUser.corporation on com.ourcompany.jpa.pk.CorporationUserPK java.lang.IllegalArgumentException: Can not get com.ourcompany.jpa.Corporation field com.ourcompany.jpa.CorporationUser.corporation on com.ourcompany.jpa.pk.CorporationUserPK at java.base/jdk.internal.reflect.MethodHandleFieldAccessorImpl.newGetIllegalArgumentException(MethodHandleFieldAccessorImpl.java:86) at java.base/jdk.internal.reflect.MethodHandleObjectFieldAccessorImpl.get(MethodHandleObjectFieldAccessorImpl.java:61) at java.base/java.lang.reflect.Field.get(Field.java:444) at org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:48) at org.hibernate.metamodel.mapping.internal.AbstractEmbeddableMapping.getValue(AbstractEmbeddableMapping.java:113) at org.hibernate.sql.results.graph.embeddable.internal.NonAggregatedIdentifierMappingInitializer.resolveInstanceSubInitializers(NonAggregatedIdentifierMappingInitializer.java:327) at org.hibernate.sql.results.graph.embeddable.internal.NonAggregatedIdentifierMappingInitializer.resolveInstance(NonAggregatedIdentifierMappingInitializer.java:314) at org.hibernate.sql.results.graph.embeddable.internal.NonAggregatedIdentifierMappingInitializer.resolveInstance(NonAggregatedIdentifierMappingInitializer.java:48) at org.hibernate.sql.results.graph.Initializer.resolveInstance(Initializer.java:149) at org.hibernate.sql.results.graph.entity.internal.EntityDelayedFetchInitializer.resolveInstance(EntityDelayedFetchInitializer.java:291) at org.hibernate.sql.results.graph.entity.internal.EntityDelayedFetchInitializer.resolveInstance(EntityDelayedFetchInitializer.java:51) at org.hibernate.sql.results.graph.Initializer.resolveInstance(Initializer.java:149) at org.hibernate.sql.results.graph.embeddable.internal.EmbeddableInitializerImpl.resolveInstanceSubInitializers(EmbeddableInitializerImpl.java:376) at org.hibernate.sql.results.graph.embeddable.internal.EmbeddableInitializerImpl.resolveInstance(EmbeddableInitializerImpl.java:356) at org.hibernate.sql.results.graph.embeddable.internal.EmbeddableInitializerImpl.resolveInstance(EmbeddableInitializerImpl.java:52) at org.hibernate.sql.results.graph.Initializer.resolveInstance(Initializer.java:149) at org.hibernate.sql.results.graph.entity.internal.EntityInitializerImpl.resolveInstanceSubInitializers(EntityInitializerImpl.java:662) at org.hibernate.sql.results.graph.entity.internal.EntityInitializerImpl.resolveKey(EntityInitializerImpl.java:589) at org.hibernate.sql.results.graph.entity.internal.EntityInitializerImpl.resolveKey(EntityInitializerImpl.java:453) at org.hibernate.sql.results.graph.entity.internal.EntityInitializerImpl.resolveKey(EntityInitializerImpl.java:97) at org.hibernate.sql.results.internal.StandardRowReader.coordinateInitializers(StandardRowReader.java:235) at org.hibernate.sql.results.internal.StandardRowReader.readRow(StandardRowReader.java:141) at org.hibernate.sql.results.spi.ListResultsConsumer.read(ListResultsConsumer.java:249) at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:201) at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:35) at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.doExecuteQuery(JdbcSelectExecutorStandardImpl.java:224) at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:102) at org.hibernate.sql.exec.spi.JdbcSelectExecutor.executeQuery(JdbcSelectExecutor.java:91) at org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:165) at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.lambda$new$1(ConcreteSqmSelectQueryPlan.java:152) at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.withCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:442) at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.performList(ConcreteSqmSelectQueryPlan.java:362) at org.hibernate.query.sqm.internal.QuerySqmImpl.doList(QuerySqmImpl.java:380) at org.hibernate.query.spi.AbstractSelectionQuery.list(AbstractSelectionQuery.java:143) at org.hibernate.query.Query.getResultList(Query.java:120) at com.ourcompany.repository.DocumentRecipientRepositoryTest.failingDocumentRead(DocumentRecipientRepositoryTest.java:33) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725) ...