Skip to content

Commit 9412c44

Browse files
dreab8Sanne
authored andcommitted
HHH-14499 Explicitly listing mapped classes which are @MappedSuperClass might break narrowing down of generics
1 parent 83f5dbf commit 9412c44

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

hibernate-core/src/main/java/org/hibernate/boot/model/source/internal/annotations/AnnotationMetadataSourceProcessorImpl.java

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ public void processEntityHierarchies(Set<String> processedEntityNames) {
252252
}
253253

254254
private List<XClass> orderAndFillHierarchy(List<XClass> original) {
255-
List<XClass> copy = new ArrayList<XClass>( original );
255+
List<XClass> copy = new ArrayList<>( original.size() );
256256
insertMappedSuperclasses( original, copy );
257257

258258
// order the hierarchy
@@ -266,16 +266,28 @@ private List<XClass> orderAndFillHierarchy(List<XClass> original) {
266266
}
267267

268268
private void insertMappedSuperclasses(List<XClass> original, List<XClass> copy) {
269+
final boolean debug = log.isDebugEnabled();
269270
for ( XClass clazz : original ) {
270-
XClass superClass = clazz.getSuperclass();
271-
while ( superClass != null
272-
&& !reflectionManager.equals( superClass, Object.class )
273-
&& !copy.contains( superClass ) ) {
274-
if ( superClass.isAnnotationPresent( Entity.class )
275-
|| superClass.isAnnotationPresent( javax.persistence.MappedSuperclass.class ) ) {
276-
copy.add( superClass );
271+
if ( clazz.isAnnotationPresent( javax.persistence.MappedSuperclass.class ) ) {
272+
if ( debug ) {
273+
log.debugf(
274+
"Skipping explicit MappedSuperclass %s, the class will be discovered analyzing the implementing class",
275+
clazz
276+
);
277+
}
278+
}
279+
else {
280+
copy.add( clazz );
281+
XClass superClass = clazz.getSuperclass();
282+
while ( superClass != null
283+
&& !reflectionManager.equals( superClass, Object.class )
284+
&& !copy.contains( superClass ) ) {
285+
if ( superClass.isAnnotationPresent( Entity.class )
286+
|| superClass.isAnnotationPresent( javax.persistence.MappedSuperclass.class ) ) {
287+
copy.add( superClass );
288+
}
289+
superClass = superClass.getSuperclass();
277290
}
278-
superClass = superClass.getSuperclass();
279291
}
280292
}
281293
}

0 commit comments

Comments
 (0)