[hibernate-issues] [Hibernate-JIRA] Updated: (HHH-6960) NullPointerException in PreCollectionRemove Listener

Scott Albertine (JIRA) noreply at atlassian.com
Fri Apr 27 10:29:51 EDT 2012


     [ https://hibernate.onjira.com/browse/HHH-6960?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Scott Albertine updated HHH-6960:
---------------------------------

    Attachment: hibernateBugProof.zip

So about 2 weeks ago I discovered this bug in my company's architecture, and have spent much of that time coming up with a viable, repeatable test case.  Y'all are very much right, it's NOT a simple bug, but actually a product of four separate issues combining.  The zip I've attached is of a project demonstrating the problem.  It depends on Spring autowiring, Hibernate collections, HQL queries, and auditing, for the bug to show up, all of which is proved and explained in the zip.  The trouble is, even with a proof, I have no idea where the fix should be implemented.  Fixing any of the four contributing factors will keep the NPE from happening, but there's still a double-removal in hibernate that's causing the issue in the first place, and the fact that it only happens with a spring passed SessionFactory raises some big questions about the reliability of that method in the first place.  I'm very interested in finding a fix or a workaround for this, as it's blocking the entire architecture from moving to hibernate 4.  Let me know what you think.

> NullPointerException in PreCollectionRemove Listener
> ----------------------------------------------------
>
>                 Key: HHH-6960
>                 URL: https://hibernate.onjira.com/browse/HHH-6960
>             Project: Hibernate ORM
>          Issue Type: Bug
>          Components: envers
>    Affects Versions: 4.0.0.Final
>         Environment: Hibernate 4.0.0 to MySQL
>            Reporter: Kevin Jordan
>            Assignee: Gail Badner
>         Attachments: hibernateBugProof.zip
>
>
> I'm getting a NullPointerException on line 47 of EnversPreCollectionRemoveEventListenerImpl very consistently. I wasn't sure if it was due to lazy collections or not, but it seems that it fails if they're eagerly fetched or lazily fetched. I'm guessing it has something to do with getLoadedPersister() returning a null value since the comments for it say "This is only available late during the flush cycle". The stack trace is
> Quote:
> java.lang.NullPointerException
> at org.hibernate.envers.event.EnversPreCollectionRemoveEventListenerImpl.onPreRemoveCollection(EnversPreCollectionRemoveEventListenerImpl.java:47)
> at org.hibernate.action.internal.CollectionRemoveAction.preRemove(CollectionRemoveAction.java:143)
> at org.hibernate.action.internal.CollectionRemoveAction.execute(CollectionRemoveAction.java:104)
> at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:273)
> at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:265)
> at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:188)
> at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:323)
> at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52)
> at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1081)
> at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:315)
> at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
> at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:175)
> at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:73)
> ... 120 more

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

       



More information about the hibernate-issues mailing list