[hibernate-issues] [Hibernate-JIRA] Updated: (HHH-2572) NullPointerException when cascade-merge detached entity graph that contains null component property

Gail Badner (JIRA) noreply at atlassian.com
Wed Apr 18 19:20:04 EDT 2007


     [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-2572?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Gail Badner updated HHH-2572:
-----------------------------

    Attachment: HHH-2572.patch

I believe this is the same issue as HHH-2542.

I am attaching a patch for a new test to be added to org.hibernate.test.component/basic/ComponentTest.testMergeComponent(), based on the test case provided by Nguyen Hau Giang.

I added the following to Employee:
- an optional component, optionalComponent;
- a Set of Employee objects, directReports. 

NullPointerException is thrown when a detached Employee is merged with new element added to directReports that has a null OptionalComponent. Note that this exception is thrown when the child element has a null component, as opposed to the grandchild element as reported earlier.

The stack trace is as follows:
java.lang.NullPointerException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:145)
	at org.hibernate.tuple.component.AbstractComponentTuplizer.getPropertyValue(AbstractComponentTuplizer.java:64)
	at org.hibernate.tuple.component.AbstractComponentTuplizer.getPropertyValues(AbstractComponentTuplizer.java:70)
	at org.hibernate.tuple.component.PojoComponentTuplizer.getPropertyValues(PojoComponentTuplizer.java:83)
	at org.hibernate.type.ComponentType.getPropertyValues(ComponentType.java:353)
	at org.hibernate.type.ComponentType.getPropertyValues(ComponentType.java:348)
	at org.hibernate.type.TypeFactory.replaceAssociations(TypeFactory.java:535)
	at org.hibernate.event.def.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:366)
	at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:195)
	at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:123)
	at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:687)
	at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:669)
	at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:245)
	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
	at org.hibernate.event.def.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:407)
	at org.hibernate.event.def.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:266)
	at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:120)
	at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:53)
	at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:677)
	at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:661)
	at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:665)
	at org.hibernate.test.component.basic.ComponentTest.testMergeComponent(ComponentTest.java:228)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at org.hibernate.junit.functional.FunctionalTestCase.runTest(FunctionalTestCase.java:101)
	at org.hibernate.junit.UnitTestCase.runBare(UnitTestCase.java:34)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:40)

I am currently testing the fix provided in HHH-2542 to see if it resolves this issue.

> NullPointerException when cascade-merge detached entity graph that contains null component property
> ---------------------------------------------------------------------------------------------------
>
>                 Key: HHH-2572
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2572
>             Project: Hibernate3
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 3.2.3
>         Environment: hibernate 3.2.3 only
>            Reporter: Nguyen Hau Giang
>            Priority: Critical
>         Attachments: HHH-2572.patch, testCase.zip
>
>
> when merging detached entity graph whose leaf-entity contains null-component property, hibernate 3.2.3 will throw NPE. (leaf-entity level>2)
> No exception was thrown in hibenate 3.2.2
> Mapping:
> Parent -> Child -> GrandChild
> All associations is cascade.
> GrandChild contains a component property.
> Test Case:
> parent=<load>;
> child=parent.get1Child();
> GrandChild grandChild=new GrandChild();
> grandChild.setComponent(null);
> child.add(grandChild);
> evict(parent);//session is closed
> ...
> merge(parent);//merge in new sesson -> THROW NullPointerException
> for further detail, see attache test case.

-- 
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