@@ -261,19 +261,15 @@ protected function loadMetadata($name)
261
261
$ class = $ this ->newClassMetadataInstance ($ className );
262
262
263
263
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 );
268
266
$ class ->setIdGeneratorType ($ parent ->generatorType );
269
267
$ this ->addInheritedFields ($ class , $ parent );
270
268
$ this ->addInheritedRelations ($ class , $ parent );
271
269
$ class ->setIdentifier ($ parent ->identifier );
272
270
$ class ->setVersioned ($ parent ->isVersioned );
273
271
$ class ->setVersionField ($ parent ->versionField );
274
- if (!$ parent ->isMappedSuperclass ) {
275
- $ class ->setDiscriminatorMap ($ parent ->discriminatorMap );
276
- }
272
+ $ class ->setDiscriminatorMap ($ parent ->discriminatorMap );
277
273
$ class ->setLifecycleCallbacks ($ parent ->lifecycleCallbacks );
278
274
$ class ->setChangeTrackingPolicy ($ parent ->changeTrackingPolicy );
279
275
}
@@ -285,7 +281,7 @@ protected function loadMetadata($name)
285
281
throw MappingException::reflectionFailure ($ className , $ e );
286
282
}
287
283
288
- if ($ parent && ! $ parent -> isMappedSuperclass ) {
284
+ if ($ parent ) {
289
285
if ($ parent ->isIdGeneratorSequence ()) {
290
286
$ class ->setSequenceGeneratorDefinition ($ parent ->sequenceGeneratorDefinition );
291
287
} else if ($ parent ->isIdGeneratorTable ()) {
@@ -318,18 +314,23 @@ protected function loadMetadata($name)
318
314
}
319
315
320
316
// 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 );
327
328
}
328
329
} else if ($ class ->isMappedSuperclass && $ class ->name == $ class ->rootEntityName && (count ($ class ->discriminatorMap ) || $ class ->discriminatorColumn )) {
329
330
// second condition is necessary for mapped superclasses in the middle of an inheritance hierachy
330
331
throw MappingException::noInheritanceOnMappedSuperClass ($ class ->name );
331
332
}
332
-
333
+
333
334
$ this ->loadedMetadata [$ className ] = $ class ;
334
335
335
336
$ parent = $ class ;
0 commit comments