diff --git a/src/main/java/org/springframework/data/auditing/AuditingHandler.java b/src/main/java/org/springframework/data/auditing/AuditingHandler.java index f7433a51e..5210104d9 100644 --- a/src/main/java/org/springframework/data/auditing/AuditingHandler.java +++ b/src/main/java/org/springframework/data/auditing/AuditingHandler.java @@ -134,6 +134,16 @@ public class AuditingHandler implements InitializingBean { touch(source, false); } + /** + * Returns whether the given source is considered to be auditable in the first place + * + * @param source can be {@literal null}. + * @return + */ + protected final boolean isAuditable(Object source) { + return factory.getBeanWrapperFor(source) != null; + } + private void touch(Object target, boolean isNew) { AuditableBeanWrapper wrapper = factory.getBeanWrapperFor(target); diff --git a/src/main/java/org/springframework/data/auditing/IsNewAwareAuditingHandler.java b/src/main/java/org/springframework/data/auditing/IsNewAwareAuditingHandler.java index f9b1d4c59..74922f80b 100644 --- a/src/main/java/org/springframework/data/auditing/IsNewAwareAuditingHandler.java +++ b/src/main/java/org/springframework/data/auditing/IsNewAwareAuditingHandler.java @@ -73,7 +73,7 @@ public class IsNewAwareAuditingHandler extends AuditingHandler { */ public void markAudited(Object object) { - if (object == null) { + if (!isAuditable(object)) { return; } diff --git a/src/test/java/org/springframework/data/auditing/IsNewAwareAuditingHandlerUnitTests.java b/src/test/java/org/springframework/data/auditing/IsNewAwareAuditingHandlerUnitTests.java index d3138ce7f..a1e2d0a76 100644 --- a/src/test/java/org/springframework/data/auditing/IsNewAwareAuditingHandlerUnitTests.java +++ b/src/test/java/org/springframework/data/auditing/IsNewAwareAuditingHandlerUnitTests.java @@ -92,8 +92,15 @@ public class IsNewAwareAuditingHandlerUnitTests extends AuditingHandlerUnitTests handler.markModified(null); } + @Test // DATACMNS-957 + public void skipsEntityWithoutIdentifier() { + getHandler().markAudited(new EntityWithoutId()); + } + static class Domain { @Id Long id; } + + static class EntityWithoutId {} }