private function __saveAssociationById(PersistentObject $object, AssociationMap $associationMap, &$commands, ClassMap $classMap, $id)
 {
     $toAttributeMap = $associationMap->getToAttributeMap();
     $fromAttributeMap = $associationMap->getFromAttributeMap();
     $refObject = $associationMap->getToClassMap()->getObject();
     if ($associationMap->getCardinality() == 'oneToOne') {
         // obtem o objeto referenciado
         if ($refObject != NULL) {
             // se a associação é inversa, atualiza o objeto referenciado
             if ($associationMap->isInverse()) {
                 $refObject->getById($id);
                 $refObject->setAttributeValue($toAttributeMap, $object->getAttributeValue($fromAttributeMap));
                 $this->_saveObject($refObject, $associationMap->getToClassMap(), $commands);
             } else {
                 // se a associação é direta, atualiza o próprio objeto
                 $object->setAttributeValue($fromAttributeMap, $id);
                 $this->_saveObject($object, $classMap, $commands);
             }
         }
     } elseif ($associationMap->getCardinality() == 'oneToMany') {
         // atualiza os objetos referenciados
         $commands[] = $associationMap->getUpdateStatementId($object, $id, $object->getAttributeValue($fromAttributeMap));
     } elseif ($associationMap->getCardinality() == 'manyToMany') {
         $commands = array();
         // atualiza a tabela associativa (removendo e reinserindo os registros de associação)
         $aId = $id;
         if (!is_array($id)) {
             $aId = array($id);
         }
         if ($object->getId()) {
             //$commands[] = $associationMap->getDeleteStatement($object);
             $commands[] = $associationMap->getDeleteStatementId($object, $aId);
         }
         foreach ($aId as $idRef) {
             $commands[] = $associationMap->getInsertStatementId($object, $idRef);
         }
         //$commands[] = $associationMap->getInsertStatementId($object, $id);
     }
 }