diff --git a/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java b/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java index 6ad7eb0edd..2d05723f92 100644 --- a/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java +++ b/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java @@ -2100,6 +2100,22 @@ public final class new HashMap(), entityBinder, isIdentifierMapper, isComponentEmbedded, inSecondPass, mappings, inheritanceStatePerClass ); + + XProperty property = propertyAnnotatedElement.getProperty(); + if(property.isAnnotationPresent(GeneratedValue.class) && + property.isAnnotationPresent(Id.class)) + { + //clone classGenerator and override with local values + HashMap localGenerators = (HashMap) new HashMap(); + localGenerators.putAll( buildLocalGenerators( property, mappings ) ); + + GeneratedValue generatedValue = property.getAnnotation( GeneratedValue.class ); + String generatorType = generatedValue != null ? generatorType( generatedValue.strategy() ) : "assigned"; + String generator = generatedValue != null ? generatedValue.generator() : BinderHelper.ANNOTATION_STRING_DEFAULT; + + BinderHelper.makeIdGenerator( (SimpleValue) comp.getProperty(property.getName()).getValue(), generatorType, generator, mappings, localGenerators); + } + } return comp; } @@ -2120,21 +2136,6 @@ public final class return comp; } - private static void bindId( - String generatorType, String generatorName, - PropertyData inferredData, Ejb3Column[] columns, PropertyHolder propertyHolder, - Map localGenerators, - boolean isComposite, - AccessType propertyAccessor, EntityBinder entityBinder, boolean isEmbedded, - boolean isIdentifierMapper, ExtendedMappings mappings, - Map inheritanceStatePerClass - ) { - - bindId(generatorType, generatorName, inferredData, null, columns, propertyHolder, - localGenerators, isComposite, propertyAccessor, entityBinder, - isEmbedded, isIdentifierMapper, mappings, inheritanceStatePerClass); - } - private static void bindId( String generatorType, String generatorName, PropertyData inferredData, PropertyData baseInferredData, Ejb3Column[] columns, PropertyHolder propertyHolder, diff --git a/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/IdClassGeneratedValueTest.java b/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/IdClassGeneratedValueTest.java index 87872ff41b..76eb23a092 100755 --- a/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/IdClassGeneratedValueTest.java +++ b/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/IdClassGeneratedValueTest.java @@ -75,7 +75,7 @@ public class IdClassGeneratedValueTest extends TestCase { s = openSession(); s.beginTransaction(); - List simpleList = s.createQuery( "select s from Simple2 s" ).list(); + List simpleList = s.createQuery( "select s from Simple2 s" ).list(); assertEquals( simpleList.size(), 2 ); s1 = ( Simple2 ) s.load( Simple2.class, new SimplePK( s1Id1, 2L ) ); assertEquals( s1.getQuantity(), 10 ); @@ -101,7 +101,7 @@ public class IdClassGeneratedValueTest extends TestCase { s = openSession(); s.beginTransaction(); - List simpleList = s.createQuery( "select m from Multiple m" ).list(); + List simpleList = s.createQuery( "select m from Multiple m" ).list(); assertEquals( simpleList.size(), 2 ); m1 = ( Multiple ) s.load( Multiple.class, new MultiplePK( m1Id1, m1Id2, 2L ) ); assertEquals( m1.getQuantity(), 10 );