From e3b7bb8b01a83c9d8b61e84d9f0a887cdedddb8e Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 14 Dec 2016 13:54:01 +0100 Subject: [PATCH] DATACMNS-957 - AuditingHandler now works with entities without an identifier. Entities without an identifier previously an exception because the IsNewStrategyFactory wasn't able to determine a strategy even if there was no auditing to be applied in the first place. We now eagerly check for auditability and skip the lookup for an IsNewStrategy completely in case that check returns false. Related pull request: #189. --- .../springframework/data/auditing/AuditingHandler.java | 10 ++++++++++ .../data/auditing/IsNewAwareAuditingHandler.java | 2 +- .../auditing/IsNewAwareAuditingHandlerUnitTests.java | 7 +++++++ 3 files changed, 18 insertions(+), 1 deletion(-) 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 {} }