[
https://hibernate.onjira.com/browse/HHH-6960?page=com.atlassian.jira.plug...
]
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