private Iterator getSubPropertyIterator(PersistentClass pc, String reducedName) {
   Value value = pc.getRecursiveProperty(reducedName).getValue();
   Iterator parentPropIter;
   if (value instanceof Component) {
     Component comp = (Component) value;
     parentPropIter = comp.getPropertyIterator();
   } else if (value instanceof ToOne) {
     ToOne toOne = (ToOne) value;
     PersistentClass referencedPc = mappings.getClass(toOne.getReferencedEntityName());
     if (toOne.getReferencedPropertyName() != null) {
       try {
         parentPropIter =
             ((Component)
                     referencedPc
                         .getRecursiveProperty(toOne.getReferencedPropertyName())
                         .getValue())
                 .getPropertyIterator();
       } catch (ClassCastException e) {
         throw new MappingException(
             "dotted notation reference neither a component nor a many/one to one", e);
       }
     } else {
       try {
         if (referencedPc.getIdentifierMapper() == null) {
           parentPropIter =
               ((Component) referencedPc.getIdentifierProperty().getValue()).getPropertyIterator();
         } else {
           parentPropIter = referencedPc.getIdentifierMapper().getPropertyIterator();
         }
       } catch (ClassCastException e) {
         throw new MappingException(
             "dotted notation reference neither a component nor a many/one to one", e);
       }
     }
   } else {
     throw new MappingException(
         "dotted notation reference neither a component nor a many/one to one");
   }
   return parentPropIter;
 }