[hibernate-issues] [Hibernate-JIRA] Issue Comment Edited: (HHH-5267) NPE when updating a detached entity with a one-to-one association changed to null that is mapped with delete-orphan

Krzysztof Kowalczyk (JIRA) noreply at atlassian.com
Wed Jan 19 11:37:06 EST 2011


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

Krzysztof Kowalczyk edited comment on HHH-5267 at 1/19/11 10:36 AM:
--------------------------------------------------------------------

I don't know if the loadedState should be used in this case, but if it should, then the problem occurs because in file DefaultSaveOrUpdateEventListener there is a null value send to 
source.getPersistenceContext().addEntity(
entity,
( persister.isMutable() ? Status.MANAGED : Status.READ_ONLY ), 
null, //cachedSate
...

There is even a comment that you there is some extra work needed to load cachedState...

I tried to resolve the cachedState in some "dirty hack" (I don't know the inner logic of hibernate yet), and then it worked, but it did broke 5 other test cases ;) 

      was (Author: ketan):
    I don't know if the loadedState should be used in this case, but if it is, then the problem occurs because in file DefaultSaveOrUpdateEventListener there is a null value send to 
source.getPersistenceContext().addEntity(
entity,
( persister.isMutable() ? Status.MANAGED : Status.READ_ONLY ), 
null, //cachedSate
...

There is even a comment that you there is some extra work needed to load cachedState...

I tried to resolve the cachedState in some "dirty hack" (I don't know the inner logic of hibernate yet), and then it worked, but it did broke 5 other test cases ;) 
  
> NPE when updating a detached entity with a one-to-one association changed to null that is mapped with delete-orphan  
> ---------------------------------------------------------------------------------------------------------------------
>
>                 Key: HHH-5267
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5267
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: annotations, core
>    Affects Versions: 3.5.3
>         Environment: Hibernate 3.5.x
>            Reporter: Krzysztof Kowalczyk
>             Fix For: 3.6.next
>
>         Attachments: hibernate_HHH-5267_2nd_testcase.patch, hibernate_HHH-5267_simpler_testcase.patch, 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