66
66
import static org .hibernate .boot .model .internal .BinderHelper .getPropertyOverriddenByMapperOrMapsId ;
67
67
import static org .hibernate .boot .model .internal .BinderHelper .getRelativePath ;
68
68
import static org .hibernate .boot .model .internal .BinderHelper .hasToOneAnnotation ;
69
- import static org .hibernate .boot .model .internal .BinderHelper .isGlobalGeneratorNameGlobal ;
70
69
import static org .hibernate .boot .model .internal .DialectOverridesAnnotationHelper .getOverridableAnnotation ;
71
- import static org .hibernate .boot .model .internal .GeneratorBinder .buildGenerators ;
72
- import static org .hibernate .boot .model .internal .GeneratorBinder .makeIdGenerator ;
73
- import static org .hibernate .boot .model .internal .GeneratorStrategies .generatorStrategy ;
70
+ import static org .hibernate .boot .model .internal .GeneratorBinder .createIdGeneratorsFromGeneratorAnnotations ;
74
71
import static org .hibernate .boot .model .internal .PropertyBinder .addElementsOfClass ;
75
72
import static org .hibernate .boot .model .internal .PropertyBinder .processElementAnnotations ;
76
73
import static org .hibernate .boot .model .internal .PropertyHolderBuilder .buildPropertyHolder ;
@@ -464,7 +461,7 @@ static Component fillEmbeddable(
464
461
? Nullability .FORCED_NULL
465
462
: ( isNullable ? Nullability .NO_CONSTRAINT : Nullability .FORCED_NOT_NULL ),
466
463
propertyAnnotatedElement ,
467
- new HashMap <> (),
464
+ Map . of (),
468
465
entityBinder ,
469
466
isIdentifierMapper ,
470
467
isComponentEmbedded ,
@@ -473,18 +470,27 @@ static Component fillEmbeddable(
473
470
inheritanceStatePerClass
474
471
);
475
472
476
- final MemberDetails property = propertyAnnotatedElement .getAttributeMember ();
477
- if ( property .hasDirectAnnotationUsage ( GeneratedValue .class ) ) {
478
- if ( isIdClass || subholder .isOrWithinEmbeddedId () ) {
479
- processGeneratedId ( context , component , property );
480
- }
481
- else {
482
- throw new AnnotationException (
483
- "Property '" + property .getName () + "' of '"
484
- + getPath ( propertyHolder , inferredData )
485
- + "' is annotated '@GeneratedValue' but is not part of an identifier" );
473
+ final MemberDetails member = propertyAnnotatedElement .getAttributeMember ();
474
+ if ( isIdClass || subholder .isOrWithinEmbeddedId () ) {
475
+ final Property property = findProperty ( component , member .getName () );
476
+ if ( property != null ) {
477
+ // Identifier properties are always simple values
478
+ final SimpleValue value = (SimpleValue ) property .getValue ();
479
+ createIdGeneratorsFromGeneratorAnnotations (
480
+ subholder ,
481
+ propertyAnnotatedElement ,
482
+ value ,
483
+ Map .of (),
484
+ context
485
+ );
486
486
}
487
487
}
488
+ else if ( member .hasDirectAnnotationUsage ( GeneratedValue .class ) ) {
489
+ throw new AnnotationException (
490
+ "Property '" + member .getName () + "' of '"
491
+ + getPath ( propertyHolder , inferredData )
492
+ + "' is annotated '@GeneratedValue' but is not part of an identifier" );
493
+ }
488
494
}
489
495
490
496
if ( compositeUserType != null ) {
@@ -494,6 +500,15 @@ static Component fillEmbeddable(
494
500
return component ;
495
501
}
496
502
503
+ private static Property findProperty (Component component , String name ) {
504
+ for ( Property property : component .getProperties () ) {
505
+ if ( property .getName ().equals ( name ) ) {
506
+ return property ;
507
+ }
508
+ }
509
+ return null ;
510
+ }
511
+
497
512
private static CompositeUserType <?> compositeUserType (
498
513
Class <? extends CompositeUserType <?>> compositeUserTypeClass ,
499
514
MetadataBuildingContext context ) {
@@ -812,40 +827,6 @@ private static boolean hasTriggeringAnnotation(MemberDetails property) {
812
827
|| property .hasDirectAnnotationUsage (ManyToMany .class );
813
828
}
814
829
815
- private static void processGeneratedId (MetadataBuildingContext context , Component component , MemberDetails property ) {
816
- final GeneratedValue generatedValue = property .getDirectAnnotationUsage ( GeneratedValue .class );
817
- final String generatorType =
818
- generatorStrategy ( generatedValue .strategy (), generatedValue .generator (), property .getType () );
819
- final String generator = generatedValue .generator ();
820
-
821
- final SimpleValue value = (SimpleValue ) component .getProperty ( property .getName ()).getValue ();
822
- if ( isGlobalGeneratorNameGlobal ( context ) ) {
823
- buildGenerators ( property , context );
824
- context .getMetadataCollector ().addSecondPass ( new IdGeneratorResolverSecondPass (
825
- value ,
826
- property ,
827
- generatorType ,
828
- generator ,
829
- context
830
- ) );
831
-
832
- // handleTypeDescriptorRegistrations( property, context );
833
- // bindEmbeddableInstantiatorRegistrations( property, context );
834
- // bindCompositeUserTypeRegistrations( property, context );
835
- // handleConverterRegistrations( property, context );
836
- }
837
- else {
838
- makeIdGenerator (
839
- value ,
840
- property ,
841
- generatorType ,
842
- generator ,
843
- context ,
844
- new HashMap <>( buildGenerators ( property , context ) )
845
- );
846
- }
847
- }
848
-
849
830
private static void processIdClassElements (
850
831
PropertyHolder propertyHolder ,
851
832
PropertyData baseInferredData ,
0 commit comments