From ebe76a0c7f4e5ef7128c8ebae87f5f164dfda876 Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Wed, 22 May 2019 12:46:15 +0200 Subject: [PATCH] DATAJDBC-374 - Polishing. Clarified the effects of collections on nullable embedded entities. Original pull request: #154. --- .../data/jdbc/core/convert/BasicJdbcConverter.java | 8 ++++++-- src/main/asciidoc/jdbc.adoc | 3 +++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/BasicJdbcConverter.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/BasicJdbcConverter.java index 54b54559f..893cf5615 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/BasicJdbcConverter.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/BasicJdbcConverter.java @@ -378,11 +378,15 @@ public class BasicJdbcConverter extends BasicRelationalConverter implements Jdbc ReadingContext newContext = extendBy(property); - if(OnEmpty.USE_EMPTY.equals(property.findAnnotation(Embedded.class).onEmpty())) { + if(shouldCreateEmptyEmbeddedInstance(property) || newContext.hasInstanceValues(idValue)) { return newContext.createInstanceInternal(idValue); } - return newContext.hasInstanceValues(idValue) ? newContext.createInstanceInternal(idValue) : null; + return null; + } + + private boolean shouldCreateEmptyEmbeddedInstance(RelationalPersistentProperty property) { + return OnEmpty.USE_EMPTY.equals(property.findAnnotation(Embedded.class).onEmpty()); } private boolean hasInstanceValues(@Nullable Object idValue) { diff --git a/src/main/asciidoc/jdbc.adoc b/src/main/asciidoc/jdbc.adoc index 77d976108..6f64629f1 100644 --- a/src/main/asciidoc/jdbc.adoc +++ b/src/main/asciidoc/jdbc.adoc @@ -332,6 +332,9 @@ public class MyEntity { <1> Shortcut for `@Embedded(onEmpty = USE_NULL)`. ==== +Embedded entities containing a `Collection` or a `Map` will always be considered non empty since they will at least contain the empty collection or map. +Such an entity will therefore never be `null` even when using @Embedded(onEmpty = USE_NULL). + [[jdbc.entity-persistence.state-detection-strategies]] === Entity State Detection Strategies