99import org .hibernate .HibernateException ;
1010import org .hibernate .boot .model .source .spi .AttributePath ;
1111import org .hibernate .boot .spi .MetadataBuildingContext ;
12+ import org .hibernate .engine .jdbc .env .spi .IdentifierHelper ;
1213
1314import static org .hibernate .boot .model .naming .ImplicitJoinColumnNameSource .Nature .ELEMENT_COLLECTION ;
1415import static org .hibernate .internal .util .StringHelper .isNotEmpty ;
@@ -191,34 +192,27 @@ public Identifier determineListIndexColumnName(ImplicitIndexColumnNameSource sou
191192 public Identifier determineForeignKeyName (ImplicitForeignKeyNameSource source ) {
192193 final Identifier userProvidedIdentifier = source .getUserProvidedIdentifier ();
193194 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 );
200198 }
201199
202200 @ Override
203201 public Identifier determineUniqueKeyName (ImplicitUniqueKeyNameSource source ) {
204202 final Identifier userProvidedIdentifier = source .getUserProvidedIdentifier ();
205203 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 );
211207 }
212208
213209 @ Override
214210 public Identifier determineIndexName (ImplicitIndexNameSource source ) {
215211 final Identifier userProvidedIdentifier = source .getUserProvidedIdentifier ();
216212 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 );
222216 }
223217
224218 /**
@@ -235,18 +229,54 @@ protected String transformAttributePath(AttributePath attributePath) {
235229 }
236230
237231 /**
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}.
239234 *
240235 * @param stringForm The String form of the name
241- * @param buildingContext Access to the IdentifierHelper
236+ * @param buildingContext Access to the {@code IdentifierHelper}
242237 *
243238 * @return The identifier
244239 */
245240 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+ );
251281 }
252282}
0 commit comments