Uploaded image for project: 'JBoss Enterprise Application Platform 6'
  1. JBoss Enterprise Application Platform 6
  2. JBPAPP6-1412

HHH-7629 Initialize PersistentCollection with fetchType LAZY returns NPE

    Details

    • Type: Bug
    • Status: Closed (View Workflow)
    • Priority: Major
    • Resolution: Rejected
    • Affects Version/s: EAP 6.0.0
    • Fix Version/s: TBD EAP 6
    • Component/s: Hibernate
    • Labels:
      None

      Description

      @JoinTable(name = "JOIN_TABLE", joinColumns =

      { @JoinColumn(name = "JOIN_TABLE_ID", referencedColumnName = "ID") }

      , inverseJoinColumns =

      { @JoinColumn(name = "ENTITY_ID", referencedColumnName = "ID") }

      )
      @ManyToMany(fetch = FetchType.LAZY)
      private Set<JoinTable> aProperty;

      When fetching this entity, and after initialize, I get all the valid attribute values but the aProperty is defined as PersistenceCollection.

      This collection is not intialized yet. When I initialize this collection as follow:

      (PersistentCollection) entity).forceInitialization();

      Or

      Hibernate.initialize(entity);

      I got NullPointerException:

      Caused by: java.lang.NullPointerException
      at org.hibernate.engine.internal.StatefulPersistenceContext.getLoadedCollectionOwnerOrNull(StatefulPersistenceContext.java:790)
      at org.hibernate.event.spi.AbstractCollectionEvent.getLoadedOwnerOrNull(AbstractCollectionEvent.java:75)
      at org.hibernate.event.spi.InitializeCollectionEvent.<init>(InitializeCollectionEvent.java:36)
      at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:1803)
      at org.hibernate.collection.internal.AbstractPersistentCollection.forceInitialization(AbstractPersistentCollection.java:489)
      at org.hibernate.Hibernate.initialize(Hibernate.java:77)

      When I check source code of class org.hibernate.engine.internal.StatefulPersistenceContext.getLoadedCollectionOwnerOrNull(StatefulPersistenceContext.java:790)

      CollectionEntry ce = getCollectionEntry( collection );
      790 if ( ce.getLoadedPersister() == null )

      { 791 return null; // early exit... 792 }

      Looks like the CollectionEntry ce is null. This collection entry is fetched from collectionEntries.get(coll);

      // Identity map of CollectionEntry instances, by the collection wrapper
      121 private IdentityMap<PersistentCollection, CollectionEntry> collectionEntries;

      I checked Jboss docs, it mentioned the way to initilialize the collection is as I have done above.
      http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-fetching-initialization

        Gliffy Diagrams

          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  brmeyer Brett Meyer
                  Reporter:
                  trogers-rh Travis Rogers
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  4 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: