|
30 | 30 | use Doctrine\ORM\Id\BigIntegerIdentityGenerator; |
31 | 31 | use Doctrine\ORM\Id\IdentityGenerator; |
32 | 32 | use Doctrine\ORM\ORMException; |
| 33 | +use Exception; |
33 | 34 | use ReflectionException; |
34 | 35 |
|
35 | 36 | /** |
@@ -70,6 +71,30 @@ class ClassMetadataFactory extends AbstractClassMetadataFactory |
70 | 71 | */ |
71 | 72 | private $embeddablesActiveNesting = array(); |
72 | 73 |
|
| 74 | + /** |
| 75 | + * {@inheritDoc} |
| 76 | + */ |
| 77 | + protected function loadMetadata($name) |
| 78 | + { |
| 79 | + /* @var $loaded string[] */ |
| 80 | + $loaded = parent::loadMetadata($name); |
| 81 | + |
| 82 | + foreach ($loaded as $className) { |
| 83 | + /* @var $metadata ClassMetadata */ |
| 84 | + $metadata = $this->getMetadataFor($className); |
| 85 | + |
| 86 | + if (! $metadata->discriminatorValue) { |
| 87 | + foreach ($metadata->discriminatorMap as $discriminatorValue => $discriminatorClass) { |
| 88 | + if ($metadata->name === $this->getMetadataFor($discriminatorClass)->getName()) { |
| 89 | + $metadata->discriminatorValue = $discriminatorValue; |
| 90 | + } |
| 91 | + } |
| 92 | + } |
| 93 | + } |
| 94 | + |
| 95 | + return $loaded; |
| 96 | + } |
| 97 | + |
73 | 98 | /** |
74 | 99 | * @param EntityManagerInterface $em |
75 | 100 | */ |
@@ -266,9 +291,9 @@ protected function validateRuntimeMetadata($class, $parent) |
266 | 291 | if ( ! $class->discriminatorColumn) { |
267 | 292 | throw MappingException::missingDiscriminatorColumn($class->name); |
268 | 293 | } |
269 | | - } else if ($parent && !$class->reflClass->isAbstract() && !in_array($class->name, array_values($class->discriminatorMap))) { |
| 294 | + } else if (! $class->reflClass->isAbstract() && !in_array($class->name, array_values($class->discriminatorMap))) { |
270 | 295 | // enforce discriminator map for all entities of an inheritance hierarchy, otherwise problems will occur. |
271 | | - throw MappingException::mappedClassNotPartOfDiscriminatorMap($class->name, $class->rootEntityName); |
| 296 | + //throw MappingException::mappedClassNotPartOfDiscriminatorMap($class->name, $class->rootEntityName); |
272 | 297 | } |
273 | 298 | } else if ($class->isMappedSuperclass && $class->name == $class->rootEntityName && (count($class->discriminatorMap) || $class->discriminatorColumn)) { |
274 | 299 | // second condition is necessary for mapped superclasses in the middle of an inheritance hierarchy |
|
0 commit comments