Browse Source

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.
pull/72/head
Kazuki Shimizu 8 years ago committed by Jens Schauder
parent
commit
0c863eb180
  1. 25
      src/main/java/org/springframework/data/jdbc/domain/support/JdbcAuditingEventListener.java
  2. 2
      src/main/java/org/springframework/data/jdbc/repository/config/JdbcAuditingRegistrar.java
  3. 2
      src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcAuditingHsqlIntegrationTests.java

25
src/main/java/org/springframework/data/jdbc/domain/support/JdbcAuditingEventListener.java

@ -19,6 +19,8 @@ import org.springframework.beans.factory.ObjectFactory; @@ -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; @@ -35,6 +37,7 @@ import org.springframework.util.Assert;
public class JdbcAuditingEventListener implements ApplicationListener<BeforeSaveEvent> {
@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<BeforeSave @@ -48,6 +51,17 @@ public class JdbcAuditingEventListener implements ApplicationListener<BeforeSave
this.handler = auditingHandler.getObject();
}
/**
* Configures a {@link JdbcMappingContext} that use for judging whether new object or not.
* @param context must not be {@literal null}
*/
public void setJdbcMappingContext(JdbcMappingContext context) {
Assert.notNull(context, "JdbcMappingContext must not be null!");
this.context = context;
}
/**
* {@inheritDoc}
*
@ -59,11 +73,14 @@ public class JdbcAuditingEventListener implements ApplicationListener<BeforeSave @@ -59,11 +73,14 @@ public class JdbcAuditingEventListener implements ApplicationListener<BeforeSave
if (handler != null) {
event.getOptionalEntity().ifPresent(entity -> {
if (event.getId().getOptionalValue().isPresent()) {
handler.markModified(entity);
} else {
@SuppressWarnings("unchecked")
Class<Object> entityType = event.getChange().getEntityType();
JdbcPersistentEntityInformation<Object, ?> entityInformation =
context.getRequiredPersistentEntityInformation(entityType);
if (entityInformation.isNew(entity)) {
handler.markCreated(entity);
} else {
handler.markModified(entity);
}
});
}

2
src/main/java/org/springframework/data/jdbc/repository/config/JdbcAuditingRegistrar.java

@ -17,6 +17,7 @@ package org.springframework.data.jdbc.repository.config; @@ -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 { @@ -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);
}

2
src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcAuditingHsqlIntegrationTests.java

@ -199,7 +199,7 @@ public class EnableJdbcAuditingHsqlIntegrationTests { @@ -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;

Loading…
Cancel
Save