From 1fad6e910c5f38d58590d5b4afff313f43bfccb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20P=C3=B6hler=20=28JPo=29?= Date: Fri, 19 Mar 2021 15:40:21 +0100 Subject: [PATCH 1/2] FIX: do not override empty (json) collections with null MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Original: https://github.com/ebean-orm/ebean/commit/5551c35ec2496a9d62ab0afcaecbed739f17aa7c Signed-off-by: Jonas Pöhler (JPo) --- .../server/query/SqlBeanLoad.java | 18 ++++++++++++------ .../java/org/tests/json/TestDbJson_List.java | 14 ++++++++++++++ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlBeanLoad.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlBeanLoad.java index ac1386e11..c1119e525 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlBeanLoad.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlBeanLoad.java @@ -6,6 +6,9 @@ import io.ebeaninternal.api.SpiQuery.Mode; import io.ebeaninternal.server.deploy.BeanProperty; import io.ebeaninternal.server.deploy.DbReadContext; +import java.util.Collection; +import java.util.Map; + /** * Controls the loading of property data into a bean. *

@@ -70,12 +73,7 @@ public class SqlBeanLoad { try { Object dbVal = prop.read(ctx); - if (!refreshLoading) { - prop.setValue(bean, dbVal); - } else { - prop.setValueIntercept(bean, dbVal); - } - + load(prop, dbVal); return dbVal; } catch (Exception e) { @@ -89,6 +87,14 @@ public class SqlBeanLoad { * Load the given value into the property. */ public void load(BeanProperty target, Object dbVal) { + if (dbVal == null) { + Object current = target.getValue(bean); + if ((current instanceof Collection && ((Collection) current).isEmpty()) + || current instanceof Map && ((Map) current).isEmpty()) { + dbVal = current; // do not modify + } + } + if (!refreshLoading) { target.setValue(bean, dbVal); } else { 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 28fd78221..d00bb3541 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 @@ -221,4 +221,18 @@ public class TestDbJson_List extends BaseTestCase { DB.delete(bean); } + + @Test + public void testNullToEmpty() { + EBasicJsonList bean = new EBasicJsonList(); + bean.setFlags(null); + bean.setTags(null); + bean.setBeanMap(null); + DB.save(bean); + + bean = DB.find(EBasicJsonList.class) + .setId(bean.getId()).findOne(); + + assertThat(bean.getFlags()).isEmpty(); + } } From 1f0ac1f1c12ea54b8738f284061a9f27e7c196bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20P=C3=B6hler?= Date: Thu, 29 Jul 2021 16:50:08 +0200 Subject: [PATCH 2/2] ADD: Testcases for List and Map as well --- ebean-core/src/test/java/org/tests/json/TestDbJson_List.java | 2 ++ 1 file changed, 2 insertions(+) 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 d00bb3541..e2d04b657 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,5 +234,7 @@ public class TestDbJson_List extends BaseTestCase { .setId(bean.getId()).findOne(); assertThat(bean.getFlags()).isEmpty(); + assertThat(bean.getTags()).isEmpty(); + assertThat(bean.getBeanMap()).isEmpty(); } }