Skip to content

Commit 21b138c

Browse files
cigalybeikov
authored andcommitted
HHH-19596 Added checks to avoid NPE's
1 parent 9bb9e37 commit 21b138c

File tree

3 files changed

+18
-5
lines changed

3 files changed

+18
-5
lines changed

hibernate-core/src/main/java/org/hibernate/dialect/type/AbstractPostgreSQLStructJdbcType.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1156,7 +1156,11 @@ public Object createJdbcValue(Object domainValue, WrapperOptions options) throws
11561156
public Object[] extractJdbcValues(Object rawJdbcValue, WrapperOptions options) throws SQLException {
11571157
assert embeddableMappingType != null;
11581158
final Object[] array = new Object[embeddableMappingType.getJdbcValueCount()];
1159-
deserializeStruct( getRawStructFromJdbcValue( rawJdbcValue ), 0, 0, array, true, options );
1159+
final String struct = getRawStructFromJdbcValue( rawJdbcValue );
1160+
if ( struct == null ) {
1161+
return null;
1162+
}
1163+
deserializeStruct( struct, 0, 0, array, true, options );
11601164
if ( inverseOrderMapping != null ) {
11611165
StructHelper.orderJdbcValues( embeddableMappingType, inverseOrderMapping, array.clone(), array );
11621166
}

hibernate-core/src/main/java/org/hibernate/type/descriptor/java/spi/EmbeddableAggregateJavaType.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ public <X> X unwrap(T value, Class<X> type, WrapperOptions options) {
9494

9595
@Override
9696
public <X> T wrap(X value, WrapperOptions options) {
97+
if ( value == null ) {
98+
return null;
99+
}
97100
if ( getJavaTypeClass().isInstance( value ) ) {
98101
//noinspection unchecked
99102
return (T) value;

hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/ArrayJdbcType.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -176,10 +176,16 @@ protected <X> X getArray(BasicExtractor<X> extractor, java.sql.Array array, Wrap
176176
final Object rawArray = array.getArray();
177177
final Object[] domainObjects = new Object[Array.getLength( rawArray )];
178178
for ( int i = 0; i < domainObjects.length; i++ ) {
179-
final Object[] aggregateRawValues = aggregateJdbcType.extractJdbcValues( Array.get( rawArray, i ), options );
180-
final StructAttributeValues attributeValues =
181-
StructHelper.getAttributeValues( embeddableMappingType, aggregateRawValues, options );
182-
domainObjects[i] = instantiate( embeddableMappingType, attributeValues );
179+
final Object rawJdbcValue = Array.get( rawArray, i );
180+
if ( rawJdbcValue == null ) {
181+
domainObjects[i] = null;
182+
}
183+
else {
184+
final Object[] aggregateRawValues = aggregateJdbcType.extractJdbcValues( rawJdbcValue, options );
185+
final StructAttributeValues attributeValues =
186+
StructHelper.getAttributeValues( embeddableMappingType, aggregateRawValues, options );
187+
domainObjects[i] = instantiate( embeddableMappingType, attributeValues );
188+
}
183189
}
184190
return extractor.getJavaType().wrap( domainObjects, options );
185191
}

0 commit comments

Comments
 (0)