We're updating the issue view to help you get more done. 

Error flushing with a many-to-many Map defined with unique="true" and cascading orphan delete

Description

Starting in 4.2.7, the following association mapping results in an error on flushing (regardless of whether there was a change to the collection).

1 2 3 4 5 6 7 8 9 10 <class name="User" table="`User`"> <id name="name" length="32" /> <map name="groups" table="UserGroup" cascade="all,delete-orphan" > <key column="name" /> <map-key column="groupType" type="integer" /> <many-to-many class="Group" unique="true" > <column name="groupName"/> </many-to-many> </map> </class>

Stacktrace:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 org.hibernate.HibernateException: Unable to resolve property: null at org.hibernate.tuple.entity.EntityMetamodel.getPropertyIndex(EntityMetamodel.java:1215) at org.hibernate.persister.entity.AbstractEntityPersister.getPropertyIndex(AbstractEntityPersister.java:2406) at org.hibernate.engine.spi.EntityEntry.getLoadedValue(EntityEntry.java:289) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:188) at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:381) at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:321) at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:298) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:161) at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:118) at org.hibernate.event.internal.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:167) at org.hibernate.event.internal.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:158) at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:91) at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:55) at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1218) at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:421) at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101) at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177) at org.hibernate.test.manytomany.mapunique.ManyToManyUniqueDelOrphanTest.testManyToManyWithCascadeDeleteOrphan(ManyToManyUniqueDelOrphanTest.java:62) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) at org.hibernate.testing.junit4.ExtendedFrameworkMethod.invokeExplosively(ExtendedFrameworkMethod.java:62) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) at org.junit.internal.runners.statements.FailOnTimeout$StatementThread.run(FailOnTimeout.java:74)

I've attached a test case (org.hibernate.test.manytomany.mapunique.ManyToManyUniqueDelOrphanTest). The test case succeeds under 4.2.6, but fails under 4.2.7 (and master).

I believe this regression was caused by the fix for HHH-6484.

Environment

None

Status

Assignee

Brett Meyer

Reporter

Darren Alec

Fix versions

Labels

None

backPortable

None

Suitable for new contributors

None

Requires Release Note

None

Pull Request

None

backportDecision

None

Components

Affects versions

4.2.7
4.2.7.SP1

Priority

Major