6.6.x regression - loading a JPA entity a second time when it contains an embedded object causes IllegalArgumentException in reflection code

Description

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) ...
UML Entity Diagram.png

Attachments

1
  • 09 Jan 2025, 09:48 PM

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

Assignee

Reporter

Labels

Worked in

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