@@ -391,6 +391,11 @@ private static void handleTypes(BootstrapContext bootstrapContext, MetadataBuild
391
391
// add Dialect contributed types
392
392
final Dialect dialect = options .getServiceRegistry ().getService ( JdbcServices .class ).getDialect ();
393
393
dialect .contributeTypes ( typeContributions , options .getServiceRegistry () );
394
+ // Capture the dialect configured JdbcTypes so that we can detect if a TypeContributor overwrote them,
395
+ // which has precedence over the fallback and preferred type registrations
396
+ final JdbcType dialectUuidDescriptor = jdbcTypeRegistry .findDescriptor ( SqlTypes .UUID );
397
+ final JdbcType dialectArrayDescriptor = jdbcTypeRegistry .findDescriptor ( SqlTypes .ARRAY );
398
+ final JdbcType dialectIntervalDescriptor = jdbcTypeRegistry .findDescriptor ( SqlTypes .INTERVAL_SECOND );
394
399
395
400
// add TypeContributor contributed types.
396
401
for ( TypeContributor contributor : classLoaderService .loadJavaServices ( TypeContributor .class ) ) {
@@ -400,23 +405,38 @@ private static void handleTypes(BootstrapContext bootstrapContext, MetadataBuild
400
405
// add fallback type descriptors
401
406
final int preferredSqlTypeCodeForUuid = getPreferredSqlTypeCodeForUuid ( serviceRegistry );
402
407
if ( preferredSqlTypeCodeForUuid != SqlTypes .UUID ) {
403
- adaptToPreferredSqlTypeCode ( jdbcTypeRegistry , SqlTypes .UUID , preferredSqlTypeCodeForUuid );
408
+ adaptToPreferredSqlTypeCode (
409
+ jdbcTypeRegistry ,
410
+ dialectUuidDescriptor ,
411
+ SqlTypes .UUID ,
412
+ preferredSqlTypeCodeForUuid
413
+ );
404
414
}
405
415
else {
406
416
addFallbackIfNecessary ( jdbcTypeRegistry , SqlTypes .UUID , SqlTypes .BINARY );
407
417
}
408
418
409
419
final int preferredSqlTypeCodeForArray = getPreferredSqlTypeCodeForArray ( serviceRegistry );
410
420
if ( preferredSqlTypeCodeForArray == SqlTypes .ARRAY ) {
411
- adaptToPreferredSqlTypeCode ( jdbcTypeRegistry , null , SqlTypes .ARRAY , SqlTypes .VARBINARY );
421
+ adaptToPreferredSqlTypeCode ( jdbcTypeRegistry , dialectArrayDescriptor , SqlTypes .ARRAY , SqlTypes .VARBINARY );
412
422
}
413
423
else {
414
- adaptToPreferredSqlTypeCode ( jdbcTypeRegistry , SqlTypes .ARRAY , preferredSqlTypeCodeForArray );
424
+ adaptToPreferredSqlTypeCode (
425
+ jdbcTypeRegistry ,
426
+ dialectArrayDescriptor ,
427
+ SqlTypes .ARRAY ,
428
+ preferredSqlTypeCodeForArray
429
+ );
415
430
}
416
431
417
432
final int preferredSqlTypeCodeForDuration = getPreferredSqlTypeCodeForDuration ( serviceRegistry );
418
433
if ( preferredSqlTypeCodeForDuration != SqlTypes .INTERVAL_SECOND ) {
419
- adaptToPreferredSqlTypeCode ( jdbcTypeRegistry , SqlTypes .INTERVAL_SECOND , preferredSqlTypeCodeForDuration );
434
+ adaptToPreferredSqlTypeCode (
435
+ jdbcTypeRegistry ,
436
+ dialectIntervalDescriptor ,
437
+ SqlTypes .INTERVAL_SECOND ,
438
+ preferredSqlTypeCodeForDuration
439
+ );
420
440
}
421
441
else {
422
442
addFallbackIfNecessary ( jdbcTypeRegistry , SqlTypes .INTERVAL_SECOND , SqlTypes .NUMERIC );
@@ -471,18 +491,6 @@ private static void handleTypes(BootstrapContext bootstrapContext, MetadataBuild
471
491
}
472
492
}
473
493
474
- private static void adaptToPreferredSqlTypeCode (
475
- JdbcTypeRegistry jdbcTypeRegistry ,
476
- int defaultSqlTypeCode ,
477
- int preferredSqlTypeCode ) {
478
- adaptToPreferredSqlTypeCode (
479
- jdbcTypeRegistry ,
480
- jdbcTypeRegistry .findDescriptor ( defaultSqlTypeCode ),
481
- defaultSqlTypeCode ,
482
- preferredSqlTypeCode
483
- );
484
- }
485
-
486
494
private static void adaptToPreferredSqlTypeCode (
487
495
JdbcTypeRegistry jdbcTypeRegistry ,
488
496
JdbcType dialectUuidDescriptor ,
@@ -494,6 +502,7 @@ private static void adaptToPreferredSqlTypeCode(
494
502
jdbcTypeRegistry .getDescriptor ( preferredSqlTypeCode )
495
503
);
496
504
}
505
+ // else warning?
497
506
}
498
507
499
508
private static void adaptToPreferredSqlTypeCodeForInstant (
0 commit comments