private function checkRecursion(MetaClassProperty $property, MetaClass $holder, $paths = array())
 {
     Assert::isTrue($property->getRelationId() == MetaRelation::ONE_TO_ONE);
     if ($property->getFetchStrategy() && $property->getFetchStrategy()->getId() != FetchStrategy::JOIN) {
         return false;
     }
     $remote = $property->getType()->getClass();
     if (isset($paths[$holder->getName()][$remote->getName()])) {
         return true;
     } else {
         $paths[$holder->getName()][$remote->getName()] = true;
         foreach ($remote->getProperties() as $remoteProperty) {
             if ($remoteProperty->getRelationId() == MetaRelation::ONE_TO_ONE) {
                 if ($this->checkRecursion($remoteProperty, $holder, $paths)) {
                     $remoteProperty->setFetchStrategy(FetchStrategy::cascade());
                 }
             }
         }
     }
     return false;
 }