1111import java .util .List ;
1212
1313import org .hibernate .boot .ResourceStreamLocator ;
14+ import org .hibernate .boot .models .HibernateAnnotations ;
15+ import org .hibernate .boot .models .JpaAnnotations ;
16+ import org .hibernate .boot .models .annotations .internal .EntityJpaAnnotation ;
17+ import org .hibernate .boot .models .internal .ModelsHelper ;
1418import org .hibernate .boot .spi .AdditionalMappingContributions ;
1519import org .hibernate .boot .spi .AdditionalMappingContributor ;
1620import org .hibernate .boot .spi .InFlightMetadataCollector ;
1721import org .hibernate .boot .spi .MetadataBuildingContext ;
1822import org .hibernate .mapping .PersistentClass ;
23+ import org .hibernate .models .internal .dynamic .DynamicClassDetails ;
24+ import org .hibernate .models .internal .dynamic .DynamicFieldDetails ;
25+ import org .hibernate .models .internal .jdk .JdkClassDetails ;
1926import org .hibernate .models .spi .ClassDetails ;
2027import org .hibernate .models .spi .ClassDetailsRegistry ;
28+ import org .hibernate .models .spi .MutableMemberDetails ;
29+ import org .hibernate .models .spi .SourceModelBuildingContext ;
2130
2231import org .hibernate .testing .orm .junit .BootstrapServiceRegistry ;
2332import org .hibernate .testing .orm .junit .BootstrapServiceRegistry .JavaService ;
@@ -292,28 +301,53 @@ public void contribute(
292301 InFlightMetadataCollector metadata ,
293302 ResourceStreamLocator resourceStreamLocator ,
294303 MetadataBuildingContext buildingContext ) {
295- final ClassDetailsRegistry classDetailsRegistry = buildingContext .getMetadataCollector ()
296- .getSourceModelBuildingContext ()
304+ SourceModelBuildingContext sourceModelBuildingContext = buildingContext .getMetadataCollector ()
305+ .getSourceModelBuildingContext ();
306+ final ClassDetailsRegistry classDetailsRegistry = sourceModelBuildingContext
297307 .getClassDetailsRegistry ();
298308
299- contributeEntity4Details ( contributions , classDetailsRegistry );
300- contributeEntity5Details ( contributions , classDetailsRegistry );
309+ contributeEntity4Details ( contributions , sourceModelBuildingContext , classDetailsRegistry );
310+ contributeEntity5Details ( contributions , sourceModelBuildingContext , classDetailsRegistry );
301311 }
302312
303313 private static void contributeEntity4Details (
304314 AdditionalMappingContributions contributions ,
315+ SourceModelBuildingContext sourceModelBuildingContext ,
305316 ClassDetailsRegistry classDetailsRegistry ) {
306- final ClassDetails entity4Details = classDetailsRegistry .resolveClassDetails (
307- Entity4 .class .getName ()
317+ final ClassDetails entity4Details = ModelsHelper .resolveClassDetails (
318+ Entity4 .class .getName (),
319+ classDetailsRegistry ,
320+ () ->
321+ new JdkClassDetails ( Entity4 .class , sourceModelBuildingContext )
308322 );
309323 contributions .contributeManagedClass ( entity4Details );
310324 }
311325
312326 private static void contributeEntity5Details (
313327 AdditionalMappingContributions contributions ,
328+ SourceModelBuildingContext modelBuildingContext ,
314329 ClassDetailsRegistry classDetailsRegistry ) {
315- final ClassDetails entity5Details = classDetailsRegistry .resolveClassDetails (
316- Entity5 .class .getName ()
330+ final ClassDetails entity5Details = ModelsHelper .resolveClassDetails (
331+ Entity5 .class .getName (),
332+ classDetailsRegistry ,
333+ () -> {
334+ final JdkClassDetails jdkClassDetails = new JdkClassDetails (
335+ Entity5 .class ,
336+ modelBuildingContext
337+ );
338+
339+ final EntityJpaAnnotation entityUsage = (EntityJpaAnnotation ) jdkClassDetails .applyAnnotationUsage (
340+ JpaAnnotations .ENTITY ,
341+ modelBuildingContext
342+ );
343+ entityUsage .name ( "___Entity5___" );
344+
345+ final MutableMemberDetails idField = (MutableMemberDetails ) jdkClassDetails .findFieldByName (
346+ "id" );
347+ idField .applyAnnotationUsage ( JpaAnnotations .ID , modelBuildingContext );
348+
349+ return jdkClassDetails ;
350+ }
317351 );
318352 contributions .contributeManagedClass ( entity5Details );
319353 }
@@ -326,17 +360,50 @@ public void contribute(
326360 InFlightMetadataCollector metadata ,
327361 ResourceStreamLocator resourceStreamLocator ,
328362 MetadataBuildingContext buildingContext ) {
329- final ClassDetailsRegistry classDetailsRegistry = buildingContext .getMetadataCollector ()
330- .getSourceModelBuildingContext ()
331- .getClassDetailsRegistry ();
332- contributeEntity6Details ( contributions , classDetailsRegistry );
363+ final SourceModelBuildingContext sourceModelBuildingContext = buildingContext .getMetadataCollector ()
364+ .getSourceModelBuildingContext ();
365+ final ClassDetailsRegistry classDetailsRegistry = sourceModelBuildingContext .getClassDetailsRegistry ();
366+ contributeEntity6Details ( contributions , sourceModelBuildingContext , classDetailsRegistry );
333367 }
334368
335369 private void contributeEntity6Details (
336370 AdditionalMappingContributions contributions ,
371+ SourceModelBuildingContext modelBuildingContext ,
337372 ClassDetailsRegistry classDetailsRegistry ) {
338- final ClassDetails entity6Details = classDetailsRegistry .resolveClassDetails (
339- "Entity6"
373+ final ClassDetails entity6Details = ModelsHelper .resolveClassDetails (
374+ "Entity6" ,
375+ classDetailsRegistry ,
376+ () -> {
377+ final DynamicClassDetails classDetails = new DynamicClassDetails (
378+ "Entity6" ,
379+ modelBuildingContext
380+ );
381+ final EntityJpaAnnotation entityUsage = (EntityJpaAnnotation ) classDetails .applyAnnotationUsage (
382+ JpaAnnotations .ENTITY ,
383+ modelBuildingContext
384+ );
385+ entityUsage .name ( "Entity6" );
386+
387+ final DynamicFieldDetails idMember = classDetails .applyAttribute (
388+ "id" ,
389+ classDetailsRegistry .resolveClassDetails ( Integer .class .getName () ),
390+ false ,
391+ false ,
392+ modelBuildingContext
393+ );
394+ idMember .applyAnnotationUsage ( JpaAnnotations .ID , modelBuildingContext );
395+
396+ final DynamicFieldDetails nameMember = classDetails .applyAttribute (
397+ "name" ,
398+ classDetailsRegistry .resolveClassDetails ( String .class .getName () ),
399+ false ,
400+ false ,
401+ modelBuildingContext
402+ );
403+ nameMember .applyAnnotationUsage ( HibernateAnnotations .NATIONALIZED , modelBuildingContext );
404+
405+ return classDetails ;
406+ }
340407 );
341408 contributions .contributeManagedClass ( entity6Details );
342409 }
0 commit comments