net.sf.hibernate.AssertionFailure: Hibernate has a bug processing collections

Hibernate JIRA | Raider Yang | 1 decade ago
  1. Speed up your debug routine!

    Automated exception search integrated into your IDE

  2. 0

    Class A has a many to many Set reference to Class B Class B has a many to many Set reference to Class A Class C is a subclass of A lazy loading is enabled The classes A, B, C use custom persisters. The sets use custom collection persisters. When updating a data member of class B (migrationStatus), We see the exception shown below in the stack trace. This bug is not seen when the contents of the set are forced to load by iterating the set, eg: Set s = b.getACollection(); for (Iterator it = s.iterator(); it.hasNext();) { A a = (A)it.next(); } Hibernate mapping files for the two classes look like: (note uses the hibernate-mapping-2.0.dtd in the patch submitted with HB-419) <class name="sample.A" schema="adm" table="SAMPLE_A" persister="sample.APersister"> <meta attribute="implements">sample.hibernate.IAuditable</meta> <id name="id" type="int" unsaved-value="null"> <column name="sample_a_id" length="32"/> <generator class="sequence"> <param name="sequence">sample_a_id_seq</param> </generator> </id> <discriminator column="discriminator_column" type="string" force="false" /> <set name="childrenSites" inverse="true" lazy="true" cascade="all-delete-orphan"> <key column="parent_site_id"/> <one-to-many class="sample.A"/> </set> <many-to-one name="parent" column="parent_a_id" cascade="none" class="sample.A"/> <property name="aName" column="a_name" type="java.lang.String"/> <set name="properties" table="A_PROPERTY" inverse="true" lazy="true" cascade="all-delete-orphan"> <key column="sample_a_id" /> <one-to-many class="sample.Property" /> </set> <set name="bCollection" table="SAMPLE_AB_ASSOC" inverse="false" lazy="true" cascade="none" persister="sample.ABCollectionPersister"> <key column="SAMPLE_A_ID"/> <many-to-many column="SAMPLE_B_ID" class="sample.B"/> </set> <subclass name="sample.C" persister="sample.CPersister"> <property name="cURI" column="c_uri" type="string" unique="true"/> </subclass> </class> <class name="sample.B" schema="adm" table="SAMPLE_B" persister="sample.BPersister"> <meta attribute="implements">sample.hibernate.IAuditable</meta> <id name="primaryKey" type="java.lang.Integer" unsaved-value="null"> <column name="sample_b_id" length="16"/> <generator class="sequence"> <param name="sequence">sample_b_id_seq</param> </generator> </id> <property name="bId" type="java.lang.String" length="16" not-null="true" column="building_id"/> <property name="bName" type="java.lang.String" length="35" not-null="false" column="b_name"/> <property name="migrationStatus" type="java.lang.Character" length="1" not-null="false" column="migration_status" /> <set name="aCollection" table="SAMPLE_AB_ASSOC" inverse="true" lazy="true" cascade="none" persister="sample.ABCollectionPersister"> <key column="sample_B_ID"/> <many-to-many column="sample_A_ID" class="sample.A"/> </set> </class> Stack Trace: net.sf.hibernate.AssertionFailure: Hibernate has a bug processing collections at net.sf.hibernate.impl.SessionImpl$CollectionEntry.postFlush(SessionImpl.java:365) at net.sf.hibernate.impl.SessionImpl.postFlush(SessionImpl.java:2800) at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2205) at sample.ABAssocTest.doUpdateAWithAssocB(ABAssocTest.java:95) at sample.ABAssocTest.testUpdateOnRealDataCase(ABAssocTest.java:55) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at junit.framework.TestCase.runTest(TestCase.java:154) at junit.framework.TestCase.runBare(TestCase.java:127) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:392) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:276) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:167)

    Hibernate JIRA | 1 decade ago | Kelley Stover
    net.sf.hibernate.AssertionFailure: Hibernate has a bug processing collections

    Not finding the right solution?
    Take a tour to get the most out of Samebug.

    Tired of useless tips?

    Automated exception search integrated into your IDE

    Root Cause Analysis

    1. net.sf.hibernate.AssertionFailure

      Hibernate has a bug processing collections

      at net.sf.hibernate.impl.SessionImpl.prepareCollectionForUpdate()
    2. net.sf.hibernate
      SessionImpl.find
      1. net.sf.hibernate.impl.SessionImpl.prepareCollectionForUpdate(SessionImpl.java:2635)
      2. net.sf.hibernate.impl.SessionImpl.updateReachableCollection(SessionImpl.java:2556)
      3. net.sf.hibernate.impl.SessionImpl.updateReachable(SessionImpl.java:2577)
      4. net.sf.hibernate.impl.SessionImpl.updateReachables(SessionImpl.java:2682)
      5. net.sf.hibernate.impl.SessionImpl.flushEntities(SessionImpl.java:2259)
      6. net.sf.hibernate.impl.SessionImpl.flushEverything(SessionImpl.java:2017)
      7. net.sf.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:1560)
      8. net.sf.hibernate.impl.SessionImpl.getQueries(SessionImpl.java:1372)
      9. net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1332)
      10. net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1322)
      10 frames