Index: EmbeddedMetaData.java =================================================================== --- EmbeddedMetaData.java (revision 5341) +++ EmbeddedMetaData.java (working copy) @@ -28,6 +28,8 @@ import java.util.Iterator; import java.util.List; +import javax.jdo.spi.PersistenceCapable; + import org.datanucleus.ClassLoaderResolver; import org.datanucleus.exceptions.ClassNotResolvedException; import org.datanucleus.util.ClassUtils; @@ -304,16 +306,26 @@ if (fieldFmd instanceof FieldMetaData) { Field cls_field = null; - try - { - cls_field = embeddedClass.getDeclaredField(fieldFmd.getName()); + Class tgtcls = embeddedClass; + AbstractClassMetaData tgtCmd = embCmd; + while (tgtcls != null && cls_field == null) { + + try + { + cls_field = tgtcls.getDeclaredField(fieldFmd.getName()); + } + catch (Exception e) + { + + tgtcls = tgtcls.getSuperclass(); + tgtCmd = embCmd.getMetaDataManager().getMetaDataForClass(tgtcls, clr); + if (tgtCmd == null) { + // MetaData field doesn't exist in the class! + throw new InvalidMetaDataException(LOCALISER, + "044071", embeddedClass.getName(), fieldFmd.getFullFieldName()); + } + } } - catch (Exception e) - { - // MetaData field doesn't exist in the class! - throw new InvalidMetaDataException(LOCALISER, - "044071", embeddedClass.getName(), fieldFmd.getFullFieldName()); - } fieldFmd.populate(clr, cls_field, null, primary); } else