diff --git a/src/main/java/org/springframework/data/mapping/context/MappingContextIsNewStrategyFactory.java b/src/main/java/org/springframework/data/mapping/context/MappingContextIsNewStrategyFactory.java index b38cd9e95..fabb489b3 100644 --- a/src/main/java/org/springframework/data/mapping/context/MappingContextIsNewStrategyFactory.java +++ b/src/main/java/org/springframework/data/mapping/context/MappingContextIsNewStrategyFactory.java @@ -85,7 +85,7 @@ public class MappingContextIsNewStrategyFactory extends IsNewStrategyFactorySupp if (entity.hasIdProperty()) { return PersistentPropertyInspectingIsNewStrategy.of(entity.getRequiredIdProperty(), - MappingContextIsNewStrategyFactory::propertyIsNull); + MappingContextIsNewStrategyFactory::propertyIsNullOrZeroNumber); } return null; @@ -116,11 +116,7 @@ public class MappingContextIsNewStrategyFactory extends IsNewStrategyFactorySupp } } - private static boolean propertyIsNull(Object it) { - return it == null; - } - private static boolean propertyIsNullOrZeroNumber(Object value) { - return propertyIsNull(value) || value instanceof Number && ((Number) value).longValue() == 0; + return value == null || value instanceof Number && ((Number) value).longValue() == 0; } } diff --git a/src/test/java/org/springframework/data/mapping/context/MappingContextIsNewStrategyFactoryUnitTests.java b/src/test/java/org/springframework/data/mapping/context/MappingContextIsNewStrategyFactoryUnitTests.java index 087ab8731..7efc00101 100755 --- a/src/test/java/org/springframework/data/mapping/context/MappingContextIsNewStrategyFactoryUnitTests.java +++ b/src/test/java/org/springframework/data/mapping/context/MappingContextIsNewStrategyFactoryUnitTests.java @@ -42,7 +42,8 @@ public class MappingContextIsNewStrategyFactoryUnitTests { public void setUp() { SampleMappingContext context = new SampleMappingContext(); - context.setInitialEntitySet(new HashSet<>(Arrays.asList(Entity.class, VersionedEntity.class))); + context.setInitialEntitySet( + new HashSet<>(Arrays.asList(Entity.class, VersionedEntity.class, PrimitiveIdEntity.class))); context.afterPropertiesSet(); factory = new MappingContextIsNewStrategyFactory(new PersistentEntities(Collections.singleton(context))); @@ -93,6 +94,18 @@ public class MappingContextIsNewStrategyFactoryUnitTests { assertThat(strategy.isNew(entity)).isFalse(); } + @Test // DATACMNS-1326 + public void entityWithPrimitiveDefaultIsNotConsideredNew() { + + IsNewStrategy strategy = factory.getIsNewStrategy(PrimitiveIdEntity.class); + + PrimitiveIdEntity entity = new PrimitiveIdEntity(); + assertThat(strategy.isNew(entity)).isTrue(); + + entity.id = 1L; + assertThat(strategy.isNew(entity)).isFalse(); + } + @SuppressWarnings("serial") static class PersistableEntity implements Persistable { @@ -118,7 +131,7 @@ public class MappingContextIsNewStrategyFactoryUnitTests { @Id Long id; } - static class PrimitveVersionedEntity { + static class PrimitiveVersionedEntity { @Version long version = 0; @@ -129,4 +142,8 @@ public class MappingContextIsNewStrategyFactoryUnitTests { @Id Long id; } + + static class PrimitiveIdEntity { + @Id long id; + } }