diff --git a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/jaxb/JAXBValueStore.java b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/jaxb/JAXBValueStore.java
index aee2c23..e1b44fd 100644
--- a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/jaxb/JAXBValueStore.java
+++ b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/jaxb/JAXBValueStore.java
@@ -39,6 +39,7 @@
 import org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping;
 import org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping;
 import org.eclipse.persistence.oxm.mappings.XMLDirectMapping;
+import org.eclipse.persistence.oxm.mappings.XMLInverseReferenceMapping;
 import org.eclipse.persistence.oxm.mappings.XMLObjectReferenceMapping;
 import org.eclipse.persistence.sdo.SDOChangeSummary;
 import org.eclipse.persistence.sdo.SDODataObject;
@@ -195,8 +196,9 @@
             // OLD VALUE
             if (mapping.isAbstractCompositeObjectMapping()) {
                 XMLCompositeObjectMapping compositeMapping = (XMLCompositeObjectMapping) mapping;
-                if (oldValue != null && compositeMapping.getInverseReferenceMapping().getAttributeAccessor() != null) {
-                    compositeMapping.getInverseReferenceMapping().getAttributeAccessor().setAttributeValueInObject(oldValue, null);
+                XMLInverseReferenceMapping inverseReferenceMapping = compositeMapping.getInverseReferenceMapping();
+                if (oldValue != null && inverseReferenceMapping != null && inverseReferenceMapping.getAttributeAccessor() != null) {
+                    inverseReferenceMapping.getAttributeAccessor().setAttributeValueInObject(oldValue, null);
                 }
             }
 
@@ -205,8 +207,9 @@
             mapping.getAttributeAccessor().setAttributeValueInObject(entity, newValue);
             if (mapping.isAbstractCompositeObjectMapping()) {
                 XMLCompositeObjectMapping compositeMapping = (XMLCompositeObjectMapping) mapping;
-                if (value != null && compositeMapping.getInverseReferenceMapping().getAttributeAccessor() != null) {
-                    compositeMapping.getInverseReferenceMapping().getAttributeAccessor().setAttributeValueInObject(newValue, entity);
+                XMLInverseReferenceMapping inverseReferenceMapping = compositeMapping.getInverseReferenceMapping();
+                if (value != null && inverseReferenceMapping != null && inverseReferenceMapping.getAttributeAccessor() != null) {
+                    inverseReferenceMapping.getAttributeAccessor().setAttributeValueInObject(newValue, entity);
                 }
             }
         }
@@ -250,7 +253,8 @@
             // OLD VALUE
             if (mapping.isAbstractCompositeCollectionMapping()) {
                 XMLCompositeCollectionMapping compositeMapping = (XMLCompositeCollectionMapping) mapping;
-                if (compositeMapping.getInverseReferenceMapping().getAttributeAccessor() != null) {
+                XMLInverseReferenceMapping inverseReferenceMapping = compositeMapping.getInverseReferenceMapping();
+                if (inverseReferenceMapping != null && inverseReferenceMapping.getAttributeAccessor() != null) {
 
                     Object oldContainer = mapping.getAttributeValueFromObject(entity);
                     if (oldContainer != null) {
@@ -258,7 +262,7 @@
                         Object iterator = containerPolicy.iteratorFor(oldContainer);
                         while (containerPolicy.hasNext(iterator)) {
                             Object oldValue = containerPolicy.next(iterator, session);
-                            compositeMapping.getInverseReferenceMapping().getAttributeAccessor().setAttributeValueInObject(oldValue, null);
+                            inverseReferenceMapping.getAttributeAccessor().setAttributeValueInObject(oldValue, null);
                         }
                     }
                 }
@@ -272,9 +276,10 @@
             Object oldValue = mapping.getAttributeAccessor().getAttributeValueFromObject(entity);
             if (mapping.isAbstractCompositeObjectMapping()) {
                 XMLCompositeObjectMapping compositeMapping = (XMLCompositeObjectMapping) mapping;
-                if (compositeMapping.getInverseReferenceMapping().getAttributeAccessor() != null) {
+                final XMLInverseReferenceMapping inverseReferenceMapping = compositeMapping.getInverseReferenceMapping();
+                if (inverseReferenceMapping != null && inverseReferenceMapping.getAttributeAccessor() != null) {
                     if (oldValue != null) {
-                        compositeMapping.getInverseReferenceMapping().getAttributeAccessor().setAttributeValueInObject(oldValue, null);
+                        inverseReferenceMapping.getAttributeAccessor().setAttributeValueInObject(oldValue, null);
                     }
                 }
             }
