hibernate-orm
hibernate-orm copied to clipboard
HHH-15050 Fix NullPointerException in StatefulPersistenceContext.extractNaturalIdValues()
StatefulPersistenceContext.extractNaturalIdValues(). See example below.
https://hibernate.atlassian.net/browse/HHH-15050
Caused by: java.lang.NullPointerException
at org.hibernate.engine.internal.StatefulPersistenceContext$1.extractNaturalIdValues(StatefulPersistenceContext.java:2163)
at org.hibernate.persister.entity.AbstractEntityPersister.handleNaturalIdReattachment(AbstractEntityPersister.java:4956)
at org.hibernate.persister.entity.AbstractEntityPersister.afterReassociate(AbstractEntityPersister.java:4930)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:322)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:230)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:95)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:75)
at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107)
at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:670)
at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:663)
at org.hibernate.engine.spi.CascadingActions$5.cascade(CascadingActions.java:219)
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:510)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:434)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:220)
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:153)
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:65)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:361)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:334)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:230)
at org.hibernate.event.internal.DefaultUpdateEventListener.performSaveOrUpdate(DefaultUpdateEventListener.java:38)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:75)
at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107)
at org.hibernate.internal.SessionImpl.fireUpdate(SessionImpl.java:712)
at org.hibernate.internal.SessionImpl.update(SessionImpl.java:705)
at org.hibernate.internal.SessionImpl.update(SessionImpl.java:700)
...<snip>...
Thanks for your pull request!
This pull request appears to follow the contribution rules.
› This message was automatically generated.
Could you add a test for this please?
Hi @sebersole ,
Unfortunately, I don't want to take more time away from work and my open-source time away from Log4j ATM.
This is part of a large proprietary application and it would likely take days and days to try and create something to reproduce this NullPointerException with no guarantee of a payoff. All I can say is that this might (maybe) be related to having an annotation @Cascade({ org.hibernate.annotations.CascadeType.SAVE_UPDATE })
The NPE happens all the time after I add the Cascade, so it's not random at least. Fixing the one NPE is simple as this PR does. Hopefully, the stack trace helps some.
The larger issue IMO is that org.hibernate.persister.entity.EntityPersister.getNaturalIdentifierProperties() is documented to return null and from a quick review, more than just this one call site do not account for a null result and will also throw NPEs. This requires deeper knowledge of the codebase than I can invest to gather now. Hence, this rambling ;-)
Yep. I'll get to this when I find some time to write a test
Yep. I'll get to this when I find some time to write a test
Thank you @sebersole
I guessed this one missed the train for 5.6.6...
Well I did say when I have time. Been super busy with Hibernate 6. Again, we will get to it when we have time.
On Wed, Mar 16, 2022, 12:57 PM Gary Gregory @.***> wrote:
I guessed this one missed the train for 5.6.6...
— Reply to this email directly, view it on GitHub https://github.com/hibernate/hibernate-orm/pull/4706#issuecomment-1069399145, or unsubscribe https://github.com/notifications/unsubscribe-auth/AABZIE6HUO2RBR5G2L62JZTVAIOIBANCNFSM5MZUEWUQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
You are receiving this because you were mentioned.Message ID: @.***>
Ping out of curiosity ;-)