@@ -56,25 +56,68 @@ public UuidGenerator(Class<?> memberType) {
5656 public UuidGenerator (
5757 org .hibernate .annotations .UuidGenerator config ,
5858 MemberDetails memberDetails ) {
59- generator = determineValueGenerator ( config , memberDetails );
59+ generator = determineValueGenerator ( config , memberDetails . getDeclaringType (). getName (), memberDetails . getName () );
6060
6161 final Class <?> memberType = memberDetails .getType ().determineRawClass ().toJavaClass ();
6262 valueTransformer = determineProperTransformer ( memberType );
6363 }
6464
65+ @ Internal
66+ public UuidGenerator (
67+ org .hibernate .annotations .UuidGenerator config ,
68+ Member idMember ) {
69+ generator = determineValueGenerator ( config , idMember .getDeclaringClass ().getName (), idMember .getName () );
70+
71+ final Class <?> propertyType = getPropertyType ( idMember );
72+ this .valueTransformer = determineProperTransformer ( propertyType );
73+ }
74+
75+ public UuidGenerator (
76+ org .hibernate .annotations .UuidGenerator config ,
77+ Member member ,
78+ GeneratorCreationContext creationContext ) {
79+ this ( config , member );
80+ }
81+
82+ /**
83+ * @return {@link EventTypeSets#INSERT_ONLY}
84+ */
85+ @ Override
86+ public EnumSet <EventType > getEventTypes () {
87+ return INSERT_ONLY ;
88+ }
89+
90+ @ Override
91+ public Object generate (SharedSessionContractImplementor session , Object owner , Object currentValue , EventType eventType ) {
92+ return valueTransformer .transform ( generator .generateUuid ( session ) );
93+ }
94+
95+ @ Internal
96+ public UuidValueGenerator getValueGenerator () {
97+ return generator ;
98+ }
99+
100+ @ Internal
101+ public ValueTransformer getValueTransformer () {
102+ return valueTransformer ;
103+ }
104+
65105 private static UuidValueGenerator determineValueGenerator (
66106 org .hibernate .annotations .UuidGenerator config ,
67- MemberDetails memberDetails ) {
107+ String memberDeclaringClassName ,
108+ String memberName ) {
68109 if ( config != null ) {
110+ // there is an annotation
69111 if ( config .algorithm () != UuidValueGenerator .class ) {
112+ // the annotation specified a custom algorithm
70113 if ( config .style () != AUTO ) {
71114 throw new MappingException (
72115 String .format (
73116 Locale .ROOT ,
74117 "Style [%s] should not be specified with custom UUID value generator : %s.%s" ,
75118 config .style ().name (),
76- memberDetails . getDeclaringType (). getName () ,
77- memberDetails . getName ()
119+ memberDeclaringClassName ,
120+ memberName
78121 )
79122 );
80123 }
@@ -83,46 +126,21 @@ private static UuidValueGenerator determineValueGenerator(
83126 if ( config .style () == TIME ) {
84127 return new CustomVersionOneStrategy ();
85128 }
86- else if ( config .style () == VERSION_6 ) {
129+ if ( config .style () == VERSION_6 ) {
87130 return UuidVersion6Strategy .INSTANCE ;
88131 }
89- else if ( config .style () == VERSION_7 ) {
132+ if ( config .style () == VERSION_7 ) {
90133 return UuidVersion7Strategy .INSTANCE ;
91134 }
135+ // NOTE : AUTO falls through
92136 }
93137
138+ // Either -
139+ // 1. there is no annotation
140+ // 2. the annotation specified AUTO (with no custom algorithm)
94141 return StandardRandomStrategy .INSTANCE ;
95142 }
96143
97- @ Internal
98- public UuidGenerator (
99- org .hibernate .annotations .UuidGenerator config ,
100- Member idMember ) {
101- if ( config .algorithm () != UuidValueGenerator .class ) {
102- if ( config .style () != AUTO ) {
103- throw new MappingException (
104- String .format (
105- Locale .ROOT ,
106- "Style [%s] should not be specified with custom UUID value generator : %s.%s" ,
107- config .style ().name (),
108- idMember .getDeclaringClass ().getName (),
109- idMember .getName ()
110- )
111- );
112- }
113- generator = instantiateCustomGenerator ( config .algorithm () );
114- }
115- else if ( config .style () == TIME ) {
116- generator = new CustomVersionOneStrategy ();
117- }
118- else {
119- generator = StandardRandomStrategy .INSTANCE ;
120- }
121-
122- final Class <?> propertyType = getPropertyType ( idMember );
123- this .valueTransformer = determineProperTransformer ( propertyType );
124- }
125-
126144 private static UuidValueGenerator instantiateCustomGenerator (Class <? extends UuidValueGenerator > algorithmClass ) {
127145 try {
128146 return algorithmClass .getDeclaredConstructor ().newInstance ();
@@ -147,34 +165,4 @@ private ValueTransformer determineProperTransformer(Class<?> propertyType) {
147165
148166 throw new HibernateException ( "Unanticipated return type [" + propertyType .getName () + "] for UUID conversion" );
149167 }
150-
151- public UuidGenerator (
152- org .hibernate .annotations .UuidGenerator config ,
153- Member member ,
154- GeneratorCreationContext creationContext ) {
155- this (config , member );
156- }
157-
158- /**
159- * @return {@link EventTypeSets#INSERT_ONLY}
160- */
161- @ Override
162- public EnumSet <EventType > getEventTypes () {
163- return INSERT_ONLY ;
164- }
165-
166- @ Override
167- public Object generate (SharedSessionContractImplementor session , Object owner , Object currentValue , EventType eventType ) {
168- return valueTransformer .transform ( generator .generateUuid ( session ) );
169- }
170-
171- @ Internal
172- public UuidValueGenerator getValueGenerator () {
173- return generator ;
174- }
175-
176- @ Internal
177- public ValueTransformer getValueTransformer () {
178- return valueTransformer ;
179- }
180168}
0 commit comments