Skip to content

Commit 67637da

Browse files
beikovjrenaat
authored andcommitted
Ensure plural types are resolved with the correct array SQL type
1 parent e343d19 commit 67637da

File tree

1 file changed

+46
-3
lines changed

1 file changed

+46
-3
lines changed

hibernate-core/src/main/java/org/hibernate/type/BasicTypeRegistry.java

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@
1616
import org.hibernate.internal.CoreMessageLogger;
1717
import org.hibernate.internal.util.StringHelper;
1818
import org.hibernate.internal.util.collections.CollectionHelper;
19+
import org.hibernate.tool.schema.extract.spi.ColumnTypeInformation;
1920
import org.hibernate.type.descriptor.converter.spi.BasicValueConverter;
2021
import org.hibernate.type.descriptor.java.BasicPluralJavaType;
2122
import org.hibernate.type.descriptor.java.ImmutableMutabilityPlan;
2223
import org.hibernate.type.descriptor.java.JavaType;
2324
import org.hibernate.type.descriptor.jdbc.ArrayJdbcType;
25+
import org.hibernate.type.descriptor.jdbc.DelegatingJdbcTypeIndicators;
2426
import org.hibernate.type.descriptor.jdbc.JdbcType;
2527
import org.hibernate.type.internal.BasicTypeImpl;
2628
import org.hibernate.type.internal.ConvertedBasicTypeImpl;
@@ -162,12 +164,53 @@ private <J> BasicType<J> resolvedType(JavaType<J> javaType, JdbcType jdbcType) {
162164

163165
private <E> BasicType<?> resolvedType(ArrayJdbcType arrayType, BasicPluralJavaType<E> castPluralJavaType) {
164166
final BasicType<E> elementType = resolve( castPluralJavaType.getElementJavaType(), arrayType.getElementJdbcType() );
167+
final var indicators = typeConfiguration.getCurrentBaseSqlTypeIndicators();
165168
final BasicType<?> resolvedType = castPluralJavaType.resolveType(
166169
typeConfiguration,
167-
typeConfiguration.getCurrentBaseSqlTypeIndicators().getDialect(),
170+
indicators.getDialect(),
168171
elementType,
169-
null,
170-
typeConfiguration.getCurrentBaseSqlTypeIndicators()
172+
new ColumnTypeInformation() {
173+
@Override
174+
public Boolean getNullable() {
175+
return null;
176+
}
177+
178+
@Override
179+
public int getTypeCode() {
180+
return arrayType.getDefaultSqlTypeCode();
181+
}
182+
183+
@Override
184+
public String getTypeName() {
185+
return null;
186+
}
187+
188+
@Override
189+
public int getColumnSize() {
190+
return 0;
191+
}
192+
193+
@Override
194+
public int getDecimalDigits() {
195+
return 0;
196+
}
197+
},
198+
new DelegatingJdbcTypeIndicators( indicators ) {
199+
@Override
200+
public Integer getExplicitJdbcTypeCode() {
201+
return arrayType.getDefaultSqlTypeCode();
202+
}
203+
204+
@Override
205+
public int getPreferredSqlTypeCodeForArray() {
206+
return arrayType.getDefaultSqlTypeCode();
207+
}
208+
209+
@Override
210+
public int getPreferredSqlTypeCodeForArray(int elementSqlTypeCode) {
211+
return arrayType.getDefaultSqlTypeCode();
212+
}
213+
}
171214
);
172215
if ( resolvedType instanceof BasicPluralType<?,?> ) {
173216
register( resolvedType );

0 commit comments

Comments
 (0)