[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-5267) NPE on Cascade after switch to hibernate 3.5

Patras Vlad (JIRA) noreply at atlassian.com
Tue Jun 29 09:33:09 EDT 2010


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-5267?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=37611#action_37611 ] 

Patras Vlad commented on HHH-5267:
----------------------------------

Our current workaround is to merge the entity before saving. This guarantees all changes made to the entity while it was detached are applied and the save won't crash. However you might need to include CascadeType.MERGE.

> NPE on Cascade after switch to hibernate 3.5
> --------------------------------------------
>
>                 Key: HHH-5267
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5267
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: annotations, core
>         Environment: Hibernate 3.5.x
>            Reporter: Krzysztof Kowalczyk
>            Priority: Blocker
>         Attachments: hibernate_HHH-5267_testcase.patch
>
>
> We use hibernate annotations and hibernate search in our project. After we moved to hibernate 3.5.2 (and 3.5.1 before that) we are having the following errors:
> java.lang.NullPointerException
> 	at org.hibernate.engine.EntityEntry.getLoadedValue(EntityEntry.java:255)
> 	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:232)
> 	at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
> 	at org.hibernate.engine.Cascade.cascade(Cascade.java:127)
> 	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:376)
> 	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:350)
> 	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:246)
> 	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:112)
> 	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
> 	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:677)
> 	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:669)
> 	at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:252)
> 	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
> 	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
> 	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
> 	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:425)
> 	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:362)
> 	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:338)
> 	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
> 	at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
> 	at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:154)
> 	at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:145)
> 	at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:88)
> 	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
> 	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1206)
> 	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:375)
> 	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
> 	at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:655)
> 	at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:709)
> 	at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:678)
> 	at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321)
> 	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
> 	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
> 	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
> 	at $Proxy67.initializePlacowka(Unknown Source)
> In different place we have the same problem:
> [java] java.lang.NullPointerException
> [java] at org.hibernate.engine.EntityEntry.getLoadedValue(EntityEntry.java:255)
> [java] at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:232)
> [java] at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
> [java] at org.hibernate.engine.Cascade.cascade(Cascade.java:127)
> [java] at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:376)
> [java] at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:350)
> [java] at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:246)
> [java] at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:112)
> [java] at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
> [java] at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:677)
> [java] at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:669)
> [java] at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:252)
> [java] at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
> [java] at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
> [java] at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
> [java] at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
> [java] at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:451)
> [java] at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:288)
> [java] at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
> [java] at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:144)
> [java] at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
> [java] at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
> [java] at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117)
> [java] at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
> [java] at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:677)
> [java] at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:669)
> [java] at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:665)
> The NPE is thrown because "loadedState" field is null. The exception seems to occur for instance when we have OneToOne with Cascade.DELETE_ORPHAN (or orphanRemoval="true"), CascadeType.SAVE_UPDATE and CascadeType.DELETE.
> I will try to create a simple example to reproduce the problem.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list