diff --git a/redisson/src/main/java/org/redisson/liveobject/core/AccessorInterceptor.java b/redisson/src/main/java/org/redisson/liveobject/core/AccessorInterceptor.java index 674f450d6..28ff7051c 100644 --- a/redisson/src/main/java/org/redisson/liveobject/core/AccessorInterceptor.java +++ b/redisson/src/main/java/org/redisson/liveobject/core/AccessorInterceptor.java @@ -175,6 +175,14 @@ public class AccessorInterceptor { } else { liveMap.fastPut(fieldName, arg); } + } else { + if (field.getAnnotation(RIndex.class) == null) { + if (commandExecutor instanceof CommandBatchService) { + liveMap.removeAsync(fieldName); + } else { + liveMap.remove(fieldName); + } + } } return me; } diff --git a/redisson/src/test/java/org/redisson/RedissonLiveObjectServiceTest.java b/redisson/src/test/java/org/redisson/RedissonLiveObjectServiceTest.java index 13b18f0f6..f4516f49a 100644 --- a/redisson/src/test/java/org/redisson/RedissonLiveObjectServiceTest.java +++ b/redisson/src/test/java/org/redisson/RedissonLiveObjectServiceTest.java @@ -653,6 +653,19 @@ public class RedissonLiveObjectServiceTest extends RedisDockerTest { assertThat(objects6.iterator().next().getId()).isEqualTo("4"); } + @Test + public void testNullValue() { + TestClass ti = new TestClass("3"); + TestClass liveObject = redisson.getLiveObjectService().merge(ti); + + liveObject.setCode("test"); + liveObject.setCode(null); + assertThat(liveObject.getCode()).isNull(); + + liveObject.setCode("123"); + assertThat(liveObject.getCode()).isEqualTo("123"); + } + @Test public void testFindGt() { RLiveObjectService s = redisson.getLiveObjectService();