Uploaded image for project: 'Hibernate ORM'
  1. HHH-4449

NPE during inserting new audited entity with reference to another proxy entity if proxy.lazyInitializer.session is null

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects versions: 3.3.2, 3.5.0.Beta-1
    • Fix versions: 3.5.0-Beta-2
    • Components: hibernate-envers
    • Labels:
      None
    • Bug Testcase Reminder (view):

      Bug reports should generally be accompanied by a test case!

    • Last commented by a user?:
      true
    • Sprint:

      Description

      NPE during inserting new audited entity with reference to another proxy entity if proxy.lazyInitializer.session is null

      java.lang.NullPointerException
      at org.hibernate.envers.tools.Tools.getTargetFromProxy(Tools.java:74)
      at org.hibernate.envers.event.AuditEventListener.generateBidirectionalCollectionChangeWorkUnits(AuditEventListener.java:108)
      at org.hibernate.envers.event.AuditEventListener.onPostInsert(AuditEventListener.java:152)
      at org.hibernate.action.EntityIdentityInsertAction.postInsert(EntityIdentityInsertAction.java:113)
      at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:89)
      at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
      at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)
      at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
      at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
      at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
      at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
      at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117)
      at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
      at com.jcatalog.core.persistence.hibernate.HibernateSaveOrUpdateListener.onSaveOrUpdate(HibernateSaveOrUpdateListener.java:31)
      at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:535)
      at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:527)
      at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:241)
      at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:292)
      at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:240)
      at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:193)
      at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:320)
      at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:266)
      at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:243)
      at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:193)
      at org.hibernate.engine.Cascade.cascade(Cascade.java:154)
      at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:479)
      at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:357)
      at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
      at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
      at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
      at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
      at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117)
      at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
      at com.jcatalog.core.persistence.hibernate.HibernateSaveOrUpdateListener.onSaveOrUpdate(HibernateSaveOrUpdateListener.java:31)
      at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:535)
      at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:527)
      at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:523)
      at org.springframework.orm.hibernate3.HibernateTemplate$16.doInHibernate(HibernateTemplate.java:747)
      at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
      at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
      at org.springframework.orm.hibernate3.HibernateTemplate.saveOrUpdate(HibernateTemplate.java:744)
      at com.jcatalog.jsfeditor.facade.HibernateEditorFacade.save(HibernateEditorFacade.java:33)

      It seems It happens when hibernate session was cleared so proxy.lazyInitializer.session is set to null but this object can be used later as refernce in other entity.
      Just for information such use case works OK with hibernate without Envers as far as we not try call getters of proxy with null session.

        Attachments

          Issue links

            Activity

              People

              • Votes:
                2 Vote for this issue
                Watchers:
                1 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: