diff --git a/src/ModelGenerator.php b/src/ModelGenerator.php
index 528cd95a13168f9b5b99475c8b88ed59d01ed629..be77d09e249a67d89cb1905fd6ffc910e7a9ba46 100644
--- a/src/ModelGenerator.php
+++ b/src/ModelGenerator.php
@@ -22,7 +22,6 @@ namespace Irstea\NgModelGeneratorBundle;
 use ApiPlatform\Core\Documentation\Documentation;
 use Irstea\NgModelGeneratorBundle\Exceptions\DomainException;
 use Irstea\NgModelGeneratorBundle\Exceptions\Exception;
-use Irstea\NgModelGeneratorBundle\Exceptions\TypeError;
 use Irstea\NgModelGeneratorBundle\Iterators\IteratorBuilder;
 use Irstea\NgModelGeneratorBundle\Metadata\MetadataFactoryInterface;
 use Irstea\NgModelGeneratorBundle\Metadata\ResourceMetadata;
@@ -261,24 +260,25 @@ final class ModelGenerator
     {
         $repositories = [];
 
-        /**
-         * @var ClassName
-         * @var ResourceMetadata $resourceMeta
-         */
+        // Premier passage pour prégénérer des référénces aux ressources
+        foreach ($this->getResourceMetadata() as $class => $resourceMeta) {
+            /* @var ClassName $class */
+            /* @var ResourceMetadata $resourceMeta */
+            $ref = $this->typeFactory->defer($class->getFullName());
+            $this->typeFactory->add($resourceMeta->getBaseName(), $ref);
+        }
+
+        // Maintenant on génére les repositories
         foreach ($this->getResourceMetadata() as $class => $resourceMeta) {
+            /* @var ClassName $class */
+            /* @var ResourceMetadata $resourceMeta */
             try {
                 $repo = $this->buildRepositories($resourceMeta);
-                if (!$repo) {
-                    continue;
+                if ($repo) {
+                    $repositories[$repo->getName()] = $repo;
                 }
-                $repositories[$repo->getName()] = $this->typeFactory->getOrCreate(
-                    $repo->getName(),
-                    function () use ($repo): Type {
-                        return $repo;
-                    }
-                )->getAsType(Repository::class);
             } catch (Exception $ex) {
-                printf("/* Erreur pendant le mapping de %s:\n *   %s */\n", $class, $ex->getMessage());
+                printf("Erreur pendant le mapping de %s: %s\n", $class, $ex->getMessage());
             }
         }
 
@@ -290,38 +290,42 @@ final class ModelGenerator
     /**
      * @param ResourceMetadata $resourceMeta
      *
-     * @return Repository`null
+     * @return Repository|null
      */
     private function buildRepositories(ResourceMetadata $resourceMeta): ?Repository
     {
-        $operations = [];
-        $iri = null;
-
         $defaultNormalization = $resourceMeta->getDefaultNormalization();
+
         $defaultNormalizationMapper = $this->serializationMapperFactory->create($defaultNormalization, true);
 
+        /**
+         * @var Type
+         * @var Property   $identifier
+         * @var Property[] $properties
+         */
         [$defaultRepr, $identifier, $properties] = $defaultNormalizationMapper->getResourceData();
 
         if (!$properties) {
-            throw new TypeError(
-                sprintf(
-                    'No property found for %s (groups: [%s])',
-                    $resourceMeta->getBaseName(),
-                    implode(', ', $defaultNormalization->getGroups())
-                )
+            printf(
+                "No property found for %s (groups: [%s])\n",
+                $resourceMeta->getBaseName(),
+                implode(', ', $defaultNormalization->getGroups())
             );
+
+            return null;
         }
 
         if (!$identifier) {
-            throw new TypeError(
-                sprintf(
-                    'No identifier found for %s (groups: [%s])',
+            printf(
+                "No identifier found for %s (groups: [%s])\n",
                     $resourceMeta->getBaseName(),
                     implode(', ', $defaultNormalization->getGroups())
-                )
-            );
+                );
+
+            return null;
         }
 
+        $operations = [];
         $pathParser = new PathParser($resourceMeta, $properties);
 
         foreach ($resourceMeta->getOperations() as $operation) {