Make the JDBC type to use for array/collection types configurable

This commit is contained in:
Christian Beikov 2024-05-03 14:44:30 +02:00
parent b273c17592
commit 17fec64fd7
2 changed files with 25 additions and 0 deletions

View File

@ -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.
* <p>
* Can be overridden locally using {@link org.hibernate.annotations.JdbcType},
* {@link org.hibernate.annotations.JdbcTypeCode}, and friends.
* <p>
* 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:

View File

@ -555,6 +555,14 @@ public final class ConfigurationHelper {
@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()