From 65997414fe6ec91081df46c834cf4b6ae70bc4db Mon Sep 17 00:00:00 2001 From: Michael Simons Date: Wed, 4 Nov 2020 14:36:53 +0100 Subject: [PATCH] DATAGRAPH-1423 - Add a better error message when persisting invalid implicit entities. --- .../data/neo4j/repository/event/IdPopulator.java | 10 ++++++++-- .../neo4j/repository/event/IdPopulatorTest.java | 13 +++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/springframework/data/neo4j/repository/event/IdPopulator.java b/src/main/java/org/springframework/data/neo4j/repository/event/IdPopulator.java index ddebae2aa..590a23e95 100644 --- a/src/main/java/org/springframework/data/neo4j/repository/event/IdPopulator.java +++ b/src/main/java/org/springframework/data/neo4j/repository/event/IdPopulator.java @@ -48,8 +48,14 @@ final class IdPopulator { Neo4jPersistentEntity nodeDescription = neo4jMappingContext.getRequiredPersistentEntity(entity.getClass()); IdDescription idDescription = nodeDescription.getIdDescription(); - if (idDescription == null && nodeDescription.isRelationshipPropertiesEntity()) { - return entity; + if (idDescription == null) { + if (nodeDescription.isRelationshipPropertiesEntity()) { + return entity; + } else { + throw new IllegalStateException( + "Cannot persist implicit entity due to missing id property on " + nodeDescription.getUnderlyingClass() + + "."); + } } // Filter in two steps to avoid unnecessary object creation. diff --git a/src/test/java/org/springframework/data/neo4j/repository/event/IdPopulatorTest.java b/src/test/java/org/springframework/data/neo4j/repository/event/IdPopulatorTest.java index 4e470328a..817e9c2a8 100644 --- a/src/test/java/org/springframework/data/neo4j/repository/event/IdPopulatorTest.java +++ b/src/test/java/org/springframework/data/neo4j/repository/event/IdPopulatorTest.java @@ -16,6 +16,7 @@ package org.springframework.data.neo4j.repository.event; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatIllegalStateException; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; @@ -94,12 +95,24 @@ class IdPopulatorTest { assertThat(populatedSample.theId).isEqualTo("Not necessary unique."); } + @Test // DATAGRAPH-1423 + void shouldNotFailWithNPEOnMissingIDGenerator() { + + IdPopulator idPopulator = new IdPopulator(new Neo4jMappingContext()); + assertThatIllegalStateException().isThrownBy(() -> idPopulator.populateIfNecessary(new ImplicitEntityWithoutId())) + .withMessage("Cannot persist implicit entity due to missing id property on " + ImplicitEntityWithoutId.class + "."); + } + @Node static class Sample { @Id @GeneratedValue(DummyIdGenerator.class) private String theId; } + static class ImplicitEntityWithoutId { + + } + static class DummyIdGenerator implements IdGenerator { @Override