Skip to content

Commit 792e562

Browse files
committed
HHH-19596 Added checks to avoid NPE's
1 parent b2177c6 commit 792e562

File tree

3 files changed

+21
-8
lines changed

3 files changed

+21
-8
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1165,7 +1165,11 @@ public Object createJdbcValue(Object domainValue, WrapperOptions options) throws
11651165
public Object[] extractJdbcValues(Object rawJdbcValue, WrapperOptions options) throws SQLException {
11661166
assert embeddableMappingType != null;
11671167
final Object[] array = new Object[embeddableMappingType.getJdbcValueCount()];
1168-
deserializeStruct( getRawStructFromJdbcValue( rawJdbcValue ), 0, 0, array, true, options );
1168+
final String struct = getRawStructFromJdbcValue( rawJdbcValue );
1169+
if ( struct == null ) {
1170+
return null;
1171+
}
1172+
deserializeStruct( struct, 0, 0, array, true, options );
11691173
if ( inverseOrderMapping != null ) {
11701174
StructHelper.orderJdbcValues( embeddableMappingType, inverseOrderMapping, array.clone(), array );
11711175
}

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
@@ -85,6 +85,9 @@ public <X> X unwrap(T value, Class<X> type, WrapperOptions options) {
8585

8686
@Override
8787
public <X> T wrap(X value, WrapperOptions options) {
88+
if ( value == null ) {
89+
return null;
90+
}
8891
if ( getJavaTypeClass().isInstance( value ) ) {
8992
//noinspection unchecked
9093
return (T) value;

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

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -191,13 +191,19 @@ protected <X> X getArray(BasicExtractor<X> extractor, java.sql.Array array, Wrap
191191
final Object rawArray = array.getArray();
192192
final Object[] domainObjects = new Object[Array.getLength( rawArray )];
193193
for ( int i = 0; i < domainObjects.length; i++ ) {
194-
final Object[] aggregateRawValues = aggregateJdbcType.extractJdbcValues( Array.get( rawArray, i ), options );
195-
final StructAttributeValues attributeValues = StructHelper.getAttributeValues(
196-
embeddableMappingType,
197-
aggregateRawValues,
198-
options
199-
);
200-
domainObjects[i] = instantiate( embeddableMappingType, attributeValues, options.getSessionFactory() );
194+
final Object rawJdbcValue = Array.get(rawArray, i);
195+
if (rawJdbcValue == null) {
196+
domainObjects[i] = null;
197+
}
198+
else {
199+
final Object[] aggregateRawValues = aggregateJdbcType.extractJdbcValues(rawJdbcValue, options);
200+
final StructAttributeValues attributeValues = StructHelper.getAttributeValues(
201+
embeddableMappingType,
202+
aggregateRawValues,
203+
options
204+
);
205+
domainObjects[i] = instantiate( embeddableMappingType, attributeValues, options.getSessionFactory() );
206+
}
201207
}
202208
return extractor.getJavaType().wrap( domainObjects, options );
203209
}

0 commit comments

Comments
 (0)