Bug 1094080 - [GSS] (6.2.x) HHH-8749 Error flushing with a many-to-many Map defined with unique="true" and cascading orphan delete
Summary: [GSS] (6.2.x) HHH-8749 Error flushing with a many-to-many Map defined with un...
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: JBoss Enterprise Application Platform 6
Classification: JBoss
Component: Hibernate
Version: 6.2.1
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: CR1
: EAP 6.2.4
Assignee: Gail Badner
QA Contact: Martin Simka
Russell Dickenson
URL:
Whiteboard:
Depends On: 1094079
Blocks: eap62-cp04-blockers 1094081 1104248
TreeView+ depends on / blocked
 
Reported: 2014-05-05 01:44 UTC by dstephan
Modified: 2018-12-05 18:26 UTC (History)
8 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
In previous versions of JBoss EAP 6, when using an indexed collection (Map or List) mapped as Many-to-Many with unique='true' and cascading orphan deletes, an exception (`Unable to resolve property: null`), was thrown on flush. This has now been corrected.
Clone Of:
Environment:
Last Closed: 2014-08-07 12:12:13 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)

Description dstephan 2014-05-05 01:44:42 UTC
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).

<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:

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.

Comment 2 Jan Martiska 2014-06-18 09:27:27 UTC
Verified in 6.2.4.CR1.

Comment 5 Gail Badner 2014-06-20 18:53:18 UTC
Sorry I missed this. This issue is particular to "indexed" collections, i.e., maps and lists. I made a small correction. Feel free to improve.


Note You need to log in before you can comment on or make changes to this bug.