private function mapConfig(Ezer_Config $config)
 {
     if (!isset($this->xml_map[$config->entityName])) {
         throw new Ezer_XmlPersistanceElementNotMappedException($config->entityName);
     }
     $class = $this->xml_map[$config->entityName];
     if (!class_exists($class)) {
         throw new Ezer_XmlPersistanceMissingClassException($class);
     }
     if (isset($config['id'])) {
         $this->unique_id = $config['id'];
     }
     $object = new $class($this->unique_id++);
     if ($config->type == Ezer_Config::ARRAY_TYPE) {
         foreach ($config as $attribute => $value) {
             if (!is_numeric($attribute)) {
                 continue;
             }
             if ($config->{$attribute} instanceof Ezer_Config) {
                 $object->add($this->mapConfig($value));
             } else {
                 $object->add($value);
             }
         }
     }
     $attributes = $config->getKeys();
     foreach ($attributes as $attribute) {
         if ($attribute == 'id') {
             continue;
         }
         if ($config->type == Ezer_Config::ARRAY_TYPE && is_numeric($attribute)) {
             continue;
         }
         if ($config->{$attribute} instanceof Ezer_Config) {
             $object->{$attribute} = $this->mapConfig($config->{$attribute});
         } else {
             $object->{$attribute} = $config->{$attribute};
         }
     }
     if ($object instanceof Ezer_Loadable) {
         $object->validate();
     }
     return $object;
 }