11
11
import java .util .List ;
12
12
13
13
import 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 ;
14
18
import org .hibernate .boot .spi .AdditionalMappingContributions ;
15
19
import org .hibernate .boot .spi .AdditionalMappingContributor ;
16
20
import org .hibernate .boot .spi .InFlightMetadataCollector ;
17
21
import org .hibernate .boot .spi .MetadataBuildingContext ;
18
22
import 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 ;
19
26
import org .hibernate .models .spi .ClassDetails ;
20
27
import org .hibernate .models .spi .ClassDetailsRegistry ;
28
+ import org .hibernate .models .spi .MutableMemberDetails ;
29
+ import org .hibernate .models .spi .SourceModelBuildingContext ;
21
30
22
31
import org .hibernate .testing .orm .junit .BootstrapServiceRegistry ;
23
32
import org .hibernate .testing .orm .junit .BootstrapServiceRegistry .JavaService ;
@@ -292,28 +301,53 @@ public void contribute(
292
301
InFlightMetadataCollector metadata ,
293
302
ResourceStreamLocator resourceStreamLocator ,
294
303
MetadataBuildingContext buildingContext ) {
295
- final ClassDetailsRegistry classDetailsRegistry = buildingContext .getMetadataCollector ()
296
- .getSourceModelBuildingContext ()
304
+ SourceModelBuildingContext sourceModelBuildingContext = buildingContext .getMetadataCollector ()
305
+ .getSourceModelBuildingContext ();
306
+ final ClassDetailsRegistry classDetailsRegistry = sourceModelBuildingContext
297
307
.getClassDetailsRegistry ();
298
308
299
- contributeEntity4Details ( contributions , classDetailsRegistry );
300
- contributeEntity5Details ( contributions , classDetailsRegistry );
309
+ contributeEntity4Details ( contributions , sourceModelBuildingContext , classDetailsRegistry );
310
+ contributeEntity5Details ( contributions , sourceModelBuildingContext , classDetailsRegistry );
301
311
}
302
312
303
313
private static void contributeEntity4Details (
304
314
AdditionalMappingContributions contributions ,
315
+ SourceModelBuildingContext sourceModelBuildingContext ,
305
316
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 )
308
322
);
309
323
contributions .contributeManagedClass ( entity4Details );
310
324
}
311
325
312
326
private static void contributeEntity5Details (
313
327
AdditionalMappingContributions contributions ,
328
+ SourceModelBuildingContext modelBuildingContext ,
314
329
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
+ }
317
351
);
318
352
contributions .contributeManagedClass ( entity5Details );
319
353
}
@@ -326,17 +360,50 @@ public void contribute(
326
360
InFlightMetadataCollector metadata ,
327
361
ResourceStreamLocator resourceStreamLocator ,
328
362
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 );
333
367
}
334
368
335
369
private void contributeEntity6Details (
336
370
AdditionalMappingContributions contributions ,
371
+ SourceModelBuildingContext modelBuildingContext ,
337
372
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
+ }
340
407
);
341
408
contributions .contributeManagedClass ( entity6Details );
342
409
}
0 commit comments