From 2691221168c83dc155fb0cd401f7c58cef25576d Mon Sep 17 00:00:00 2001 From: rbygrave Date: Fri, 30 Jul 2021 22:53:51 +1200 Subject: [PATCH] #2278 - Do not override empty json collections, when database value is null --- .../ebeaninternal/server/deploy/BeanProperty.java | 13 +++++++++++++ .../server/deploy/BeanPropertyJsonMapper.java | 3 +++ .../test/java/org/tests/json/TestDbJson_List.java | 3 +-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java index a33d183ea..d564a1f7a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java @@ -50,6 +50,7 @@ import java.io.IOException; import java.lang.reflect.Field; import java.sql.SQLException; import java.sql.Types; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; @@ -623,9 +624,21 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty { return scalarType.read(reader); } + protected Object checkForEmpty(EntityBean bean) { + final Object value = getValue(bean); + if (value instanceof Collection && ((Collection) value).isEmpty() + || value instanceof Map && ((Map) value).isEmpty()) { + return value; + } + return null; + } + public Object readSet(DataReader reader, EntityBean bean) throws SQLException { try { Object value = scalarType.read(reader); + if (value == null) { + value = checkForEmpty(bean); + } if (bean != null) { setValue(bean, value); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyJsonMapper.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyJsonMapper.java index bc7392287..0b7cdebbc 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyJsonMapper.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyJsonMapper.java @@ -76,6 +76,9 @@ public class BeanPropertyJsonMapper extends BeanProperty { public Object readSet(DataReader reader, EntityBean bean) throws SQLException { try { Object value = scalarType.read(reader); + if (value == null) { + value = checkForEmpty(bean); + } if (bean != null) { setValue(bean, value); String json = reader.popJson(); diff --git a/ebean-core/src/test/java/org/tests/json/TestDbJson_List.java b/ebean-core/src/test/java/org/tests/json/TestDbJson_List.java index 8378888b2..647aa6eff 100644 --- a/ebean-core/src/test/java/org/tests/json/TestDbJson_List.java +++ b/ebean-core/src/test/java/org/tests/json/TestDbJson_List.java @@ -234,8 +234,7 @@ public class TestDbJson_List extends BaseTestCase { bean.setBeanMap(null); DB.save(bean); - bean = DB.find(EBasicJsonList.class) - .setId(bean.getId()).findOne(); + bean = DB.find(EBasicJsonList.class).setId(bean.getId()).findOne(); assertThat(bean.getFlags()).isEmpty(); assertThat(bean.getTags()).isEmpty();