NPE on `getObjectChangeSet().getChangesForAttributeNamed()`
Describe the bug
I encountered the following null pointer exception:
Cannot invoke "org.eclipse.persistence.internal.sessions.ObjectChangeSet.getChangesForAttributeNamed(String)"
because the return value of "org.eclipse.persistence.internal.descriptors.changetracking.AttributeChangeListener.getObjectChangeSet()" is null
- EclipseLink version: 4.0.5
- Java/JDK version: 21
The following line seems most likely to be the culprit:
https://github.com/eclipse-ee4j/eclipselink/blob/dfc411d38767f696ce9f2741de051aef050cbeba/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/changetracking/AttributeChangeTrackingPolicy.java#L142
Unfortunately, I have no further details than this.
Any chance of preventing this NPE from being thrown?
Hello, Eclipselink team !
+1 on this issue. I have a similar issue with a NPE on : Cannot invoke "org.eclipse.persistence.internal.sessions.CollectionChangeRecord.getAddObjectList()" because "changeRecord" is null
EL version : 4.0.4 Java version : 17
This append when i'm cloning and replacing an entity on a parent entity Example :
Entity "Structure" A has a "File" A with all its child entities Entity "Structure" B has a "File" B with all its child entities
I'm cloning File B and assign it to Structure A in replacement of file A (with java.lang.cloneable)
Static weaving is enabled, the issue does not append when static weaving isn't applied Entity tracking is not enabled on these entities
Full stack trace :
java.lang.NullPointerException: Cannot invoke "org.eclipse.persistence.internal.sessions.CollectionChangeRecord.getAddObjectList()" because "changeRecord" is null
at org.eclipse.persistence.internal.queries.ListContainerPolicy.updateChangeRecordForSelfMerge(ListContainerPolicy.java:182)
at org.eclipse.persistence.mappings.CollectionMapping.updateChangeRecordForSelfMerge(CollectionMapping.java:2146)
at org.eclipse.persistence.descriptors.changetracking.AttributeChangeTrackingPolicy.updateListenerForSelfMerge(AttributeChangeTrackingPolicy.java:138)
at org.eclipse.persistence.mappings.CollectionMapping.mergeIntoObject(CollectionMapping.java:1649)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.mergeIntoObject(ObjectBuilder.java:4281)
at org.eclipse.persistence.internal.sessions.MergeManager.mergeChangesOfCloneIntoWorkingCopy(MergeManager.java:612)
at org.eclipse.persistence.internal.sessions.MergeManager.mergeChanges(MergeManager.java:324)
at org.eclipse.persistence.mappings.ObjectReferenceMapping.mergeIntoObject(ObjectReferenceMapping.java:525)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.mergeIntoObject(ObjectBuilder.java:4281)
at org.eclipse.persistence.internal.sessions.MergeManager.mergeChangesOfCloneIntoWorkingCopy(MergeManager.java:612)
at org.eclipse.persistence.internal.sessions.MergeManager.mergeChanges(MergeManager.java:324)
at org.eclipse.persistence.mappings.ObjectReferenceMapping.mergeIntoObject(ObjectReferenceMapping.java:525)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.mergeIntoObject(ObjectBuilder.java:4281)
at org.eclipse.persistence.internal.sessions.MergeManager.mergeChangesOfCloneIntoWorkingCopy(MergeManager.java:612)
at org.eclipse.persistence.internal.sessions.MergeManager.mergeChanges(MergeManager.java:324)
at org.eclipse.persistence.mappings.CollectionMapping.mergeIntoObject(CollectionMapping.java:1645)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.mergeIntoObject(ObjectBuilder.java:4281)
at org.eclipse.persistence.internal.sessions.MergeManager.mergeChangesOfCloneIntoWorkingCopy(MergeManager.java:612)
at org.eclipse.persistence.internal.sessions.MergeManager.mergeChanges(MergeManager.java:324)
at org.eclipse.persistence.mappings.CollectionMapping.mergeIntoObject(CollectionMapping.java:1645)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.mergeIntoObject(ObjectBuilder.java:4281)
at org.eclipse.persistence.internal.sessions.MergeManager.mergeChangesOfCloneIntoWorkingCopy(MergeManager.java:612)
at org.eclipse.persistence.internal.sessions.MergeManager.mergeChanges(MergeManager.java:324)
at org.eclipse.persistence.mappings.CollectionMapping.mergeIntoObject(CollectionMapping.java:1645)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.mergeIntoObject(ObjectBuilder.java:4281)
at org.eclipse.persistence.internal.sessions.MergeManager.mergeChangesOfCloneIntoWorkingCopy(MergeManager.java:612)
at org.eclipse.persistence.internal.sessions.MergeManager.mergeChanges(MergeManager.java:324)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.mergeCloneWithReferences(UnitOfWorkImpl.java:3681)
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.mergeCloneWithReferences(RepeatableWriteUnitOfWork.java:402)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.mergeCloneWithReferences(UnitOfWorkImpl.java:3641)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.mergeInternal(EntityManagerImpl.java:644)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.merge(EntityManagerImpl.java:622)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:569)
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:319)
at jdk.proxy3/jdk.proxy3.$Proxy85.merge(Unknown Source)
Is there some chance to handle this NPE correctly ? Thanks !
Hello,
in attachment You can find some initial test case (Maven project with Apache Derby DB which should be started by mvn derby:run in the project directory).
This test case com.oracle.jpa.bugtest.TestBug#testEL2415 doesn't leads into mentioned exception yet.
I'd like ask You to clarify based on attachement following:
- entity definitions
com.oracle.jpa.bugtest.domain(clone methods?) - persistence.xml settings (if there are some special/additional settings like SessionListener....)
- in
com.oracle.jpa.bugtest.TestBug#testEL2415add to the end operations which leads into mentioned error ()
From the provided descriptions it's not clear to me what exactly lead into NPE error.
jpa-bug-2415-NPEOnGetObjectChangeSetGetChangesForAttributeNamed.tar.gz