# Wrong parent is set to array if it is inside component

**URL:** <https://discourse.hibernate.org/t/wrong-parent-is-set-to-array-if-it-is-inside-component/10958>\
**Category:** Hibernate ORM\
**Created:** [January 29, 2025, 7:24pm UTC](https://discourse.hibernate.org/t/wrong-parent-is-set-to-array-if-it-is-inside-component/10958 "2025-01-29T19:24:53Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Anil\_Buyukarslan](https://avatars.discourse-cdn.com/v4/letter/a/ed655f/32.png) [@Anil\_Buyukarslan](https://discourse.hibernate.org/u/Anil_Buyukarslan)\
**Post date:** [January 29, 2025, 7:24pm UTC](https://discourse.hibernate.org/t/wrong-parent-is-set-to-array-if-it-is-inside-component/10958/1 "2025-01-29T19:24:53Z")

</div>

Hi,

We are upgrading from hibernate 5 to 6. Our code base has hbm.xml mappings from years ago which was working fine until now. The latest issue we faced is related to a structure as below:

```auto
<class name="root" ....>
    <component name="component" ...>
          <array name="list" ...>

```

When we do a fetch for the class, we see below error:

```auto
org.hibernate.PropertySetterAccessException: IllegalArgumentException occurred while calling setter for property [component.list]
at org.hibernate.property.access.spi.SetterMethodImpl.set(SetterMethodImpl.java:107)
	at org.hibernate.collection.spi.PersistentArrayHolder.injectLoadedState(PersistentArrayHolder.java:125)
	at org.hibernate.sql.results.internal.LoadingCollectionEntryImpl.finishLoading(LoadingCollectionEntryImpl.java:78)
	at org.hibernate.sql.results.jdbc.internal.JdbcValuesSourceProcessingStateStandardImpl.finishLoadingCollections(JdbcValuesSourceProcessingStateStandardImpl.java:171)
	at org.hibernate.sql.results.jdbc.internal.JdbcValuesSourceProcessingStateStandardImpl.finishUp(JdbcValuesSourceProcessingStateStandardImpl.java:142)

```

When I debug the hibernate code, I saw that the owningEntityInitializer is set to root class. As a result, setter method is getting called on root class instead of component class. I am not sure if I can hint hibernate to use parent instead of owning entity. When I debug, I saw that the parent was correctly set to component but the AbstractNonJoinCollectionInitializer class uses owningEntityInitializer to set the owner of the collection.

I know that hbm.xml files are deprecated but I wanted to try my luck here to see anyone has any idea.

---

<div class="post-metadata">

**Author:** ![mbladel](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.hibernate.org/mbladel/32/2128_2.png) [@mbladel](https://discourse.hibernate.org/u/mbladel)\
**Post date:** [January 30, 2025, 8:01am UTC](https://discourse.hibernate.org/t/wrong-parent-is-set-to-array-if-it-is-inside-component/10958/2 "2025-01-30T08:01:07Z")

</div>

@Anil_Buyukarslan please post the full stack trace of the issue - from the limited one you pasted here, it doesn’t look like the error occurs when setting the collection’s owner but when invoking the setter method for the `component.list` field.

Also, note that `hbm.xml` are considered deprecated, we strongly suggest evaluating a migration to mapping annotations or at least to the standard `orm.xml` [mapping files](https://discourse.hibernate.org/t/converting-hbm-xml-to-orm-xml/8912/7).

---

<div class="post-metadata">

**Author:** ![Anil\_Buyukarslan](https://avatars.discourse-cdn.com/v4/letter/a/ed655f/32.png) [@Anil\_Buyukarslan](https://discourse.hibernate.org/u/Anil_Buyukarslan)\
**Post date:** [January 30, 2025, 2:50pm UTC](https://discourse.hibernate.org/t/wrong-parent-is-set-to-array-if-it-is-inside-component/10958/3 "2025-01-30T14:50:40Z")

</div>

Hi @mbladel ,

Here is the full stack trace:

```auto
at org.hibernate.property.access.spi.SetterMethodImpl.set(SetterMethodImpl.java:107)
	at org.hibernate.collection.spi.PersistentArrayHolder.injectLoadedState(PersistentArrayHolder.java:125)
	at org.hibernate.sql.results.internal.LoadingCollectionEntryImpl.finishLoading(LoadingCollectionEntryImpl.java:78)
	at org.hibernate.sql.results.jdbc.internal.JdbcValuesSourceProcessingStateStandardImpl.finishLoadingCollections(JdbcValuesSourceProcessingStateStandardImpl.java:171)
	at org.hibernate.sql.results.jdbc.internal.JdbcValuesSourceProcessingStateStandardImpl.finishUp(JdbcValuesSourceProcessingStateStandardImpl.java:142)
	at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:205)
	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.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:142)
	at org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:132)
	at org.hibernate.loader.ast.internal.CollectionLoaderSingleKey.load(CollectionLoaderSingleKey.java:120)
	at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:748)
	at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:69)
	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127)
	at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:1724)
	at org.hibernate.collection.spi.AbstractPersistentCollection.lambda$initialize$3(AbstractPersistentCollection.java:617)
	at org.hibernate.collection.spi.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:266)
	at org.hibernate.collection.spi.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:615)
	at org.hibernate.collection.spi.AbstractPersistentCollection.forceInitialization(AbstractPersistentCollection.java:818)
	at org.hibernate.engine.internal.StatefulPersistenceContext.initializeNonLazyCollections(StatefulPersistenceContext.java:1169)
	at org.hibernate.engine.internal.StatefulPersistenceContext.initializeNonLazyCollections(StatefulPersistenceContext.java:1155)
	at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:224)
	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.loader.ast.internal.SingleIdLoadPlan.load(SingleIdLoadPlan.java:145)
	at org.hibernate.loader.ast.internal.SingleIdLoadPlan.load(SingleIdLoadPlan.java:117)
	at org.hibernate.loader.ast.internal.SingleIdEntityLoaderStandardImpl.load(SingleIdEntityLoaderStandardImpl.java:74)
	at org.hibernate.persister.entity.AbstractEntityPersister.doLoad(AbstractEntityPersister.java:3886)
	at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3875)
	at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:604)
	at org.hibernate.event.internal.DefaultLoadEventListener.loadFromCacheOrDatasource(DefaultLoadEventListener.java:590)
	at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:560)
	at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:544)
	at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:206)
	at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:245)
	at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:110)
	at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:69)
	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:138)
	at org.hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:1229)
	at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1217)
	at org.hibernate.loader.internal.IdentifierLoadAccessImpl.load(IdentifierLoadAccessImpl.java:210)
	at org.hibernate.loader.internal.IdentifierLoadAccessImpl.doLoad(IdentifierLoadAccessImpl.java:161)
	at org.hibernate.loader.internal.IdentifierLoadAccessImpl.lambda$load$1(IdentifierLoadAccessImpl.java:150)
	at org.hibernate.loader.internal.IdentifierLoadAccessImpl.perform(IdentifierLoadAccessImpl.java:113)
	at org.hibernate.loader.internal.IdentifierLoadAccessImpl.load(IdentifierLoadAccessImpl.java:150)
	at org.hibernate.internal.SessionImpl.find(SessionImpl.java:2459)
	at org.hibernate.internal.SessionImpl.find(SessionImpl.java:2425)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:364)
	at jdk.proxy2/jdk.proxy2.$Proxy160.find(Unknown Source)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:320)
	at jdk.proxy2/jdk.proxy2.$Proxy160.find(Unknown Source)
.
.
.
Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.checkReceiver(DirectMethodHandleAccessor.java:197)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:99)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.hibernate.property.access.spi.SetterMethodImpl.set(SetterMethodImpl.java:47)
	... 169 common frames omitted

```

Indeed, the issue occurs while hibernate tries to set the value of the list. But when I debug hibernate code, I saw that it tries to invoke the setter on root object not on component object. That is why I mentioned that the collection’s owner is set wrongly.

I am aware of the deprecation, but due to time constraints, we try to make things work first and then move to annotations later on.

---

<div class="post-metadata">

**Author:** ![Anil\_Buyukarslan](https://avatars.discourse-cdn.com/v4/letter/a/ed655f/32.png) [@Anil\_Buyukarslan](https://discourse.hibernate.org/u/Anil_Buyukarslan)\
**Post date:** [January 31, 2025, 11:44am UTC](https://discourse.hibernate.org/t/wrong-parent-is-set-to-array-if-it-is-inside-component/10958/4 "2025-01-31T11:44:09Z")

</div>

Hi,

I was able to reproduce the issue with annotations. When I use a List, everything works fine but if I use MyType array for the field type, then I see the same error. Hibernate tries to call the setter on root object instead of embeddable object.

---

<div class="post-metadata">

**Author:** ![mbladel](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.hibernate.org/mbladel/32/2128_2.png) [@mbladel](https://discourse.hibernate.org/u/mbladel)\
**Post date:** [January 31, 2025, 12:32pm UTC](https://discourse.hibernate.org/t/wrong-parent-is-set-to-array-if-it-is-inside-component/10958/5 "2025-01-31T12:32:49Z")

</div>

@Anil_Buyukarslan that is interesting, is `MyType` a custom `UserType` you implemented? In any case, if you have a reproducer against the current Hibernate version I would ask you to share a minified version of it (you can look at our [test case templates](https://github.com/hibernate/hibernate-test-case-templates/blob/master/orm/hibernate-orm-6/src/test/java/org/hibernate/bugs/JPAUnitTestCase.java) for example) and attach that reproducer to a new issue in [our tracker](https://hibernate.atlassian.net/browse/HHH), thanks.

---

<div class="post-metadata">

**Author:** ![Anil\_Buyukarslan](https://avatars.discourse-cdn.com/v4/letter/a/ed655f/32.png) [@Anil\_Buyukarslan](https://discourse.hibernate.org/u/Anil_Buyukarslan)\
**Post date:** [January 31, 2025, 4:54pm UTC](https://discourse.hibernate.org/t/wrong-parent-is-set-to-array-if-it-is-inside-component/10958/6 "2025-01-31T16:54:53Z")

</div>

@mbladel I created [Jira](https://hibernate.atlassian.net/browse/HHH-19092) with a reproducer. MyType is a simple Entity.
