From a73920f2f0e7ed66ffdabb6ae986d0facbd921bc Mon Sep 17 00:00:00 2001
From: Mateusz Charytoniuk <mateusz.charytoniuk@protonmail.com>
Date: Sun, 11 Feb 2024 10:25:53 +0100
Subject: [PATCH] chore(doctrine): preload class metadata

---
 .../DoctrineEntityManagerRepositoryProvider.php       | 11 +++++++++++
 .../DoctrineORMConfigurationProvider.php              |  2 ++
 2 files changed, 13 insertions(+)

diff --git a/src/SingletonProvider/DoctrineEntityManagerRepositoryProvider.php b/src/SingletonProvider/DoctrineEntityManagerRepositoryProvider.php
index 6167b487..587ab4f6 100644
--- a/src/SingletonProvider/DoctrineEntityManagerRepositoryProvider.php
+++ b/src/SingletonProvider/DoctrineEntityManagerRepositoryProvider.php
@@ -44,6 +44,8 @@ final readonly class DoctrineEntityManagerRepositoryProvider extends SingletonPr
             $this->generateProxies($doctrineEntityManagerRepository);
         }
 
+        $this->preloadClassMetadata($doctrineEntityManagerRepository);
+
         return $doctrineEntityManagerRepository;
     }
 
@@ -66,4 +68,13 @@ final readonly class DoctrineEntityManagerRepositoryProvider extends SingletonPr
          */
         $entityManager->getConnection()->close();
     }
+
+    private function preloadClassMetadata(DoctrineEntityManagerRepository $doctrineEntityManagerRepository): void
+    {
+        $doctrineEntityManagerRepository
+            ->buildEntityManager()
+            ->getMetadataFactory()
+            ->getAllMetadata()
+        ;
+    }
 }
diff --git a/src/SingletonProvider/DoctrineORMConfigurationProvider.php b/src/SingletonProvider/DoctrineORMConfigurationProvider.php
index 5167ace0..e256eb9f 100644
--- a/src/SingletonProvider/DoctrineORMConfigurationProvider.php
+++ b/src/SingletonProvider/DoctrineORMConfigurationProvider.php
@@ -14,6 +14,7 @@ use Distantmagic\Resonance\Feature;
 use Distantmagic\Resonance\PHPProjectFiles;
 use Distantmagic\Resonance\SingletonContainer;
 use Distantmagic\Resonance\SingletonProvider;
+use Doctrine\Common\EventManager;
 use Doctrine\ORM\Configuration;
 use Doctrine\ORM\ORMSetup;
 use Doctrine\ORM\Proxy\ProxyFactory;
@@ -30,6 +31,7 @@ final readonly class DoctrineORMConfigurationProvider extends SingletonProvider
         private ApplicationConfiguration $applicationConfiguration,
         private DoctrineAttributeDriver $doctrineAttributeDriver,
         private DoctrineEntityListenerResolver $doctrineEntityListenerResolver,
+        private EventManager $eventManager,
     ) {}
 
     public function provide(SingletonContainer $singletons, PHPProjectFiles $phpProjectFiles): Configuration
-- 
GitLab