From 0c863eb1800fda3f0a5570bf5709d232eff3f21f Mon Sep 17 00:00:00 2001 From: Kazuki Shimizu Date: Fri, 18 May 2018 03:58:55 +0900 Subject: [PATCH] DATAJDBC-216 - Support @Id property primitive type for auditing. The new check is now properly done using Spring Data meta Informationen. Original pull request: #71. --- .../support/JdbcAuditingEventListener.java | 25 ++++++++++++++++--- .../config/JdbcAuditingRegistrar.java | 2 ++ ...nableJdbcAuditingHsqlIntegrationTests.java | 2 +- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/springframework/data/jdbc/domain/support/JdbcAuditingEventListener.java b/src/main/java/org/springframework/data/jdbc/domain/support/JdbcAuditingEventListener.java index bdb31ee21..8de09cd65 100644 --- a/src/main/java/org/springframework/data/jdbc/domain/support/JdbcAuditingEventListener.java +++ b/src/main/java/org/springframework/data/jdbc/domain/support/JdbcAuditingEventListener.java @@ -19,6 +19,8 @@ import org.springframework.beans.factory.ObjectFactory; import org.springframework.context.ApplicationListener; import org.springframework.data.auditing.AuditingHandler; import org.springframework.data.jdbc.mapping.event.BeforeSaveEvent; +import org.springframework.data.jdbc.mapping.model.JdbcMappingContext; +import org.springframework.data.jdbc.mapping.model.JdbcPersistentEntityInformation; import org.springframework.data.jdbc.repository.config.EnableJdbcAuditing; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -35,6 +37,7 @@ import org.springframework.util.Assert; public class JdbcAuditingEventListener implements ApplicationListener { @Nullable private AuditingHandler handler; + private JdbcMappingContext context; /** * Configures the {@link AuditingHandler} to be used to set the current auditor on the domain types touched. @@ -48,6 +51,17 @@ public class JdbcAuditingEventListener implements ApplicationListener { - - if (event.getId().getOptionalValue().isPresent()) { - handler.markModified(entity); - } else { + @SuppressWarnings("unchecked") + Class entityType = event.getChange().getEntityType(); + JdbcPersistentEntityInformation entityInformation = + context.getRequiredPersistentEntityInformation(entityType); + if (entityInformation.isNew(entity)) { handler.markCreated(entity); + } else { + handler.markModified(entity); } }); } diff --git a/src/main/java/org/springframework/data/jdbc/repository/config/JdbcAuditingRegistrar.java b/src/main/java/org/springframework/data/jdbc/repository/config/JdbcAuditingRegistrar.java index 41e6a87a8..d40566a70 100644 --- a/src/main/java/org/springframework/data/jdbc/repository/config/JdbcAuditingRegistrar.java +++ b/src/main/java/org/springframework/data/jdbc/repository/config/JdbcAuditingRegistrar.java @@ -17,6 +17,7 @@ package org.springframework.data.jdbc.repository.config; import java.lang.annotation.Annotation; +import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionRegistry; @@ -83,6 +84,7 @@ class JdbcAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport { BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(listenerClass); builder.addPropertyValue("auditingHandler", ParsingUtils.getObjectFactoryBeanDefinition(getAuditingHandlerBeanName(), null)); + builder.setAutowireMode(AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE); registerInfrastructureBeanWithId(builder.getRawBeanDefinition(), listenerClass.getName(), registry); } diff --git a/src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcAuditingHsqlIntegrationTests.java b/src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcAuditingHsqlIntegrationTests.java index 24b8b0b49..8eb9df7b1 100644 --- a/src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcAuditingHsqlIntegrationTests.java +++ b/src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcAuditingHsqlIntegrationTests.java @@ -199,7 +199,7 @@ public class EnableJdbcAuditingHsqlIntegrationTests { @Data static class AuditingAnnotatedDummyEntity { - @Id Long id; + @Id long id; @CreatedBy String createdBy; @CreatedDate LocalDateTime createdDate; @LastModifiedBy String lastModifiedBy;