@@ -261,19 +261,15 @@ protected function loadMetadata($name)
261261 $ class = $ this ->newClassMetadataInstance ($ className );
262262
263263 if ($ parent ) {
264- if (!$ parent ->isMappedSuperclass ) {
265- $ class ->setInheritanceType ($ parent ->inheritanceType );
266- $ class ->setDiscriminatorColumn ($ parent ->discriminatorColumn );
267- }
264+ $ class ->setInheritanceType ($ parent ->inheritanceType );
265+ $ class ->setDiscriminatorColumn ($ parent ->discriminatorColumn );
268266 $ class ->setIdGeneratorType ($ parent ->generatorType );
269267 $ this ->addInheritedFields ($ class , $ parent );
270268 $ this ->addInheritedRelations ($ class , $ parent );
271269 $ class ->setIdentifier ($ parent ->identifier );
272270 $ class ->setVersioned ($ parent ->isVersioned );
273271 $ class ->setVersionField ($ parent ->versionField );
274- if (!$ parent ->isMappedSuperclass ) {
275- $ class ->setDiscriminatorMap ($ parent ->discriminatorMap );
276- }
272+ $ class ->setDiscriminatorMap ($ parent ->discriminatorMap );
277273 $ class ->setLifecycleCallbacks ($ parent ->lifecycleCallbacks );
278274 $ class ->setChangeTrackingPolicy ($ parent ->changeTrackingPolicy );
279275 }
@@ -285,7 +281,7 @@ protected function loadMetadata($name)
285281 throw MappingException::reflectionFailure ($ className , $ e );
286282 }
287283
288- if ($ parent && ! $ parent -> isMappedSuperclass ) {
284+ if ($ parent ) {
289285 if ($ parent ->isIdGeneratorSequence ()) {
290286 $ class ->setSequenceGeneratorDefinition ($ parent ->sequenceGeneratorDefinition );
291287 } else if ($ parent ->isIdGeneratorTable ()) {
@@ -318,18 +314,23 @@ protected function loadMetadata($name)
318314 }
319315
320316 // verify inheritance
321- if (!$ parent && !$ class ->isMappedSuperclass && !$ class ->isInheritanceTypeNone ()) {
322- if (count ($ class ->discriminatorMap ) == 0 ) {
323- throw MappingException::missingDiscriminatorMap ($ class ->name );
324- }
325- if (!$ class ->discriminatorColumn ) {
326- throw MappingException::missingDiscriminatorColumn ($ class ->name );
317+ if (!$ class ->isMappedSuperclass && !$ class ->isInheritanceTypeNone ()) {
318+ if (!$ parent ) {
319+ if (count ($ class ->discriminatorMap ) == 0 ) {
320+ throw MappingException::missingDiscriminatorMap ($ class ->name );
321+ }
322+ if (!$ class ->discriminatorColumn ) {
323+ throw MappingException::missingDiscriminatorColumn ($ class ->name );
324+ }
325+ } else if ($ parent && !in_array ($ class ->name , array_values ($ class ->discriminatorMap ))) {
326+ // enforce discriminator map for all entities of an inheritance hierachy, otherwise problems will occur.
327+ throw MappingException::mappedClassNotPartOfDiscriminatorMap ($ class ->name , $ class ->rootEntityName );
327328 }
328329 } else if ($ class ->isMappedSuperclass && $ class ->name == $ class ->rootEntityName && (count ($ class ->discriminatorMap ) || $ class ->discriminatorColumn )) {
329330 // second condition is necessary for mapped superclasses in the middle of an inheritance hierachy
330331 throw MappingException::noInheritanceOnMappedSuperClass ($ class ->name );
331332 }
332-
333+
333334 $ this ->loadedMetadata [$ className ] = $ class ;
334335
335336 $ parent = $ class ;
0 commit comments