9
9
import org .hibernate .HibernateException ;
10
10
import org .hibernate .boot .model .source .spi .AttributePath ;
11
11
import org .hibernate .boot .spi .MetadataBuildingContext ;
12
+ import org .hibernate .engine .jdbc .env .spi .IdentifierHelper ;
12
13
13
14
import static org .hibernate .boot .model .naming .ImplicitJoinColumnNameSource .Nature .ELEMENT_COLLECTION ;
14
15
import static org .hibernate .internal .util .StringHelper .isNotEmpty ;
@@ -191,34 +192,27 @@ public Identifier determineListIndexColumnName(ImplicitIndexColumnNameSource sou
191
192
public Identifier determineForeignKeyName (ImplicitForeignKeyNameSource source ) {
192
193
final Identifier userProvidedIdentifier = source .getUserProvidedIdentifier ();
193
194
final MetadataBuildingContext buildingContext = source .getBuildingContext ();
194
- return userProvidedIdentifier != null ? userProvidedIdentifier : toIdentifier (
195
- NamingHelper .withCharset ( buildingContext .getBuildingOptions ().getSchemaCharset () )
196
- .generateHashedFkName ( "FK" , source .getTableName (),
197
- source .getReferencedTableName (), source .getColumnNames () ),
198
- buildingContext
199
- );
195
+ return userProvidedIdentifier != null
196
+ ? userProvidedIdentifier
197
+ : generateConstraintName ( source , buildingContext );
200
198
}
201
199
202
200
@ Override
203
201
public Identifier determineUniqueKeyName (ImplicitUniqueKeyNameSource source ) {
204
202
final Identifier userProvidedIdentifier = source .getUserProvidedIdentifier ();
205
203
final MetadataBuildingContext buildingContext = source .getBuildingContext ();
206
- return userProvidedIdentifier != null ? userProvidedIdentifier : toIdentifier (
207
- NamingHelper .withCharset ( buildingContext .getBuildingOptions ().getSchemaCharset () )
208
- .generateHashedConstraintName ( "UK" , source .getTableName (), source .getColumnNames () ),
209
- buildingContext
210
- );
204
+ return userProvidedIdentifier != null
205
+ ? userProvidedIdentifier
206
+ : generateConstraintName ( source , buildingContext );
211
207
}
212
208
213
209
@ Override
214
210
public Identifier determineIndexName (ImplicitIndexNameSource source ) {
215
211
final Identifier userProvidedIdentifier = source .getUserProvidedIdentifier ();
216
212
final MetadataBuildingContext buildingContext = source .getBuildingContext ();
217
- return userProvidedIdentifier != null ? userProvidedIdentifier : toIdentifier (
218
- NamingHelper .withCharset ( buildingContext .getBuildingOptions ().getSchemaCharset () )
219
- .generateHashedConstraintName ( "IDX" , source .getTableName (), source .getColumnNames () ),
220
- buildingContext
221
- );
213
+ return userProvidedIdentifier != null
214
+ ? userProvidedIdentifier
215
+ : generateConstraintName ( source , buildingContext );
222
216
}
223
217
224
218
/**
@@ -235,18 +229,54 @@ protected String transformAttributePath(AttributePath attributePath) {
235
229
}
236
230
237
231
/**
238
- * Easy hook to build an Identifier using the keyword safe IdentifierHelper.
232
+ * Easy hook to build an {@link Identifier} using the keyword safe
233
+ * {@link org.hibernate.engine.jdbc.env.spi.IdentifierHelper}.
239
234
*
240
235
* @param stringForm The String form of the name
241
- * @param buildingContext Access to the IdentifierHelper
236
+ * @param buildingContext Access to the {@code IdentifierHelper}
242
237
*
243
238
* @return The identifier
244
239
*/
245
240
protected Identifier toIdentifier (String stringForm , MetadataBuildingContext buildingContext ) {
246
- return buildingContext .getMetadataCollector ()
247
- .getDatabase ()
248
- .getJdbcEnvironment ()
249
- .getIdentifierHelper ()
250
- .toIdentifier ( stringForm );
241
+ return toIdentifier ( stringForm ,
242
+ buildingContext .getMetadataCollector ()
243
+ .getDatabase ()
244
+ .getJdbcEnvironment ()
245
+ .getIdentifierHelper () );
246
+ }
247
+
248
+ /**
249
+ * Easy hook to build an {@link Identifier} using the keyword safe
250
+ * {@link org.hibernate.engine.jdbc.env.spi.IdentifierHelper}.
251
+ *
252
+ * @param stringForm The String form of the name
253
+ * @param identifierHelper The {@code IdentifierHelper}
254
+ *
255
+ * @return The identifier
256
+ */
257
+ protected Identifier toIdentifier (String stringForm , IdentifierHelper identifierHelper ) {
258
+ return identifierHelper .toIdentifier ( stringForm );
259
+ }
260
+
261
+ protected Identifier generateConstraintName (ImplicitForeignKeyNameSource source , MetadataBuildingContext context ) {
262
+ return toIdentifier (
263
+ NamingHelper .withCharset ( context .getBuildingOptions ().getSchemaCharset () )
264
+ .generateHashedFkName ( "FK" , source .getTableName (),
265
+ source .getReferencedTableName (), source .getColumnNames () ),
266
+ context
267
+ );
268
+ }
269
+
270
+ protected Identifier generateConstraintName (ImplicitConstraintNameSource source , MetadataBuildingContext context ) {
271
+ final String prefix = switch (source .kind ()) {
272
+ case INDEX -> "IDX" ;
273
+ case UNIQUE_KEY -> "UK" ;
274
+ case FOREIGN_KEY -> throw new IllegalArgumentException ();
275
+ };
276
+ return toIdentifier (
277
+ NamingHelper .withCharset ( context .getBuildingOptions ().getSchemaCharset () )
278
+ .generateHashedConstraintName ( prefix , source .getTableName (), source .getColumnNames () ),
279
+ context
280
+ );
251
281
}
252
282
}
0 commit comments