@@ -56,25 +56,68 @@ public UuidGenerator(Class<?> memberType) {
56
56
public UuidGenerator (
57
57
org .hibernate .annotations .UuidGenerator config ,
58
58
MemberDetails memberDetails ) {
59
- generator = determineValueGenerator ( config , memberDetails );
59
+ generator = determineValueGenerator ( config , memberDetails . getDeclaringType (). getName (), memberDetails . getName () );
60
60
61
61
final Class <?> memberType = memberDetails .getType ().determineRawClass ().toJavaClass ();
62
62
valueTransformer = determineProperTransformer ( memberType );
63
63
}
64
64
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
+
65
105
private static UuidValueGenerator determineValueGenerator (
66
106
org .hibernate .annotations .UuidGenerator config ,
67
- MemberDetails memberDetails ) {
107
+ String memberDeclaringClassName ,
108
+ String memberName ) {
68
109
if ( config != null ) {
110
+ // there is an annotation
69
111
if ( config .algorithm () != UuidValueGenerator .class ) {
112
+ // the annotation specified a custom algorithm
70
113
if ( config .style () != AUTO ) {
71
114
throw new MappingException (
72
115
String .format (
73
116
Locale .ROOT ,
74
117
"Style [%s] should not be specified with custom UUID value generator : %s.%s" ,
75
118
config .style ().name (),
76
- memberDetails . getDeclaringType (). getName () ,
77
- memberDetails . getName ()
119
+ memberDeclaringClassName ,
120
+ memberName
78
121
)
79
122
);
80
123
}
@@ -83,46 +126,21 @@ private static UuidValueGenerator determineValueGenerator(
83
126
if ( config .style () == TIME ) {
84
127
return new CustomVersionOneStrategy ();
85
128
}
86
- else if ( config .style () == VERSION_6 ) {
129
+ if ( config .style () == VERSION_6 ) {
87
130
return UuidVersion6Strategy .INSTANCE ;
88
131
}
89
- else if ( config .style () == VERSION_7 ) {
132
+ if ( config .style () == VERSION_7 ) {
90
133
return UuidVersion7Strategy .INSTANCE ;
91
134
}
135
+ // NOTE : AUTO falls through
92
136
}
93
137
138
+ // Either -
139
+ // 1. there is no annotation
140
+ // 2. the annotation specified AUTO (with no custom algorithm)
94
141
return StandardRandomStrategy .INSTANCE ;
95
142
}
96
143
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
-
126
144
private static UuidValueGenerator instantiateCustomGenerator (Class <? extends UuidValueGenerator > algorithmClass ) {
127
145
try {
128
146
return algorithmClass .getDeclaredConstructor ().newInstance ();
@@ -147,34 +165,4 @@ private ValueTransformer determineProperTransformer(Class<?> propertyType) {
147
165
148
166
throw new HibernateException ( "Unanticipated return type [" + propertyType .getName () + "] for UUID conversion" );
149
167
}
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
- }
180
168
}
0 commit comments