Skip to content

Commit c9bc3dc

Browse files
committed
HHH-18582 Throw explicit error when trying to map nested arrays
1 parent a34fb6e commit c9bc3dc

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
import org.hibernate.HibernateException;
1515
import org.hibernate.Internal;
16+
import org.hibernate.MappingException;
1617
import org.hibernate.internal.CoreLogging;
1718
import org.hibernate.internal.CoreMessageLogger;
1819
import org.hibernate.internal.util.StringHelper;
@@ -157,16 +158,24 @@ private <J> BasicType<J> resolvedType(JavaType<J> javaType, JdbcType jdbcType) {
157158
}
158159

159160
private <E> BasicType<?> resolvedType(ArrayJdbcType arrayType, BasicPluralJavaType<E> castPluralJavaType) {
161+
final BasicType<E> elementType = resolve( castPluralJavaType.getElementJavaType(), arrayType.getElementJdbcType() );
160162
final BasicType<?> resolvedType = castPluralJavaType.resolveType(
161163
typeConfiguration,
162164
typeConfiguration.getCurrentBaseSqlTypeIndicators().getDialect(),
163-
resolve( castPluralJavaType.getElementJavaType(), arrayType.getElementJdbcType() ),
165+
elementType,
164166
null,
165167
typeConfiguration.getCurrentBaseSqlTypeIndicators()
166168
);
167169
if ( resolvedType instanceof BasicPluralType<?,?> ) {
168170
register( resolvedType );
169171
}
172+
else if ( resolvedType == null ) {
173+
final Class<?> elementJavaTypeClass = elementType.getJavaTypeDescriptor().getJavaTypeClass();
174+
if ( elementJavaTypeClass != null && elementJavaTypeClass.isArray() && elementJavaTypeClass != byte[].class ) {
175+
// No support for nested arrays, except for byte[][]
176+
throw new MappingException( "Nested arrays (with the exception of byte[][]) are not supported" );
177+
}
178+
}
170179
return resolvedType;
171180
}
172181

0 commit comments

Comments
 (0)