From 17fec64fd78f7fe2c790563ba0d8d4947a24f6f4 Mon Sep 17 00:00:00 2001 From: Christian Beikov Date: Fri, 3 May 2024 14:44:30 +0200 Subject: [PATCH] Make the JDBC type to use for array/collection types configurable --- .../java/org/hibernate/cfg/MappingSettings.java | 17 +++++++++++++++++ .../util/config/ConfigurationHelper.java | 8 ++++++++ 2 files changed, 25 insertions(+) diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/MappingSettings.java b/hibernate-core/src/main/java/org/hibernate/cfg/MappingSettings.java index 6025269701..9efcd840dc 100644 --- a/hibernate-core/src/main/java/org/hibernate/cfg/MappingSettings.java +++ b/hibernate-core/src/main/java/org/hibernate/cfg/MappingSettings.java @@ -257,6 +257,23 @@ public interface MappingSettings { @Incubating String PREFER_NATIVE_ENUM_TYPES = "hibernate.type.prefer_native_enum_types"; + /** + * Specifies the preferred JDBC type for storing plural i.e. array/collection values. + *

+ * Can be overridden locally using {@link org.hibernate.annotations.JdbcType}, + * {@link org.hibernate.annotations.JdbcTypeCode}, and friends. + *

+ * Can also specify the name of the {@link org.hibernate.type.SqlTypes} constant + * field, for example, {@code hibernate.type.preferred_array_jdbc_type=ARRAY} + * or {@code hibernate.type.preferred_array_jdbc_type=TABLE}. + * + * @settingDefault {@link Dialect#getPreferredSqlTypeCodeForArray()}. + * + * @since 6.6 + */ + @Incubating + String PREFERRED_ARRAY_JDBC_TYPE = "hibernate.type.preferred_array_jdbc_type"; + /** * Specifies a {@link org.hibernate.type.format.FormatMapper} used for JSON * serialization and deserialization, either: diff --git a/hibernate-core/src/main/java/org/hibernate/internal/util/config/ConfigurationHelper.java b/hibernate-core/src/main/java/org/hibernate/internal/util/config/ConfigurationHelper.java index 9b7bd2a29d..4fd922b427 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/util/config/ConfigurationHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/util/config/ConfigurationHelper.java @@ -555,6 +555,14 @@ public static synchronized int getPreferredSqlTypeCodeForInstant(StandardService @Incubating public static synchronized int getPreferredSqlTypeCodeForArray(StandardServiceRegistry serviceRegistry) { + final Integer explicitSetting = serviceRegistry.requireService( ConfigurationService.class ).getSetting( + AvailableSettings.PREFERRED_ARRAY_JDBC_TYPE, + TypeCodeConverter.INSTANCE + ); + if ( explicitSetting != null ) { + INCUBATION_LOGGER.incubatingSetting( AvailableSettings.PREFERRED_ARRAY_JDBC_TYPE ); + return explicitSetting; + } // default to the Dialect answer return serviceRegistry.requireService( JdbcServices.class ) .getJdbcEnvironment()