Skip to content

Commit 0c863eb

Browse files
kazuki43zooschauder
authored andcommitted
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.
1 parent 46a07ac commit 0c863eb

File tree

3 files changed

+24
-5
lines changed

3 files changed

+24
-5
lines changed

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

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import org.springframework.context.ApplicationListener;
2020
import org.springframework.data.auditing.AuditingHandler;
2121
import org.springframework.data.jdbc.mapping.event.BeforeSaveEvent;
22+
import org.springframework.data.jdbc.mapping.model.JdbcMappingContext;
23+
import org.springframework.data.jdbc.mapping.model.JdbcPersistentEntityInformation;
2224
import org.springframework.data.jdbc.repository.config.EnableJdbcAuditing;
2325
import org.springframework.lang.Nullable;
2426
import org.springframework.util.Assert;
@@ -35,6 +37,7 @@
3537
public class JdbcAuditingEventListener implements ApplicationListener<BeforeSaveEvent> {
3638

3739
@Nullable private AuditingHandler handler;
40+
private JdbcMappingContext context;
3841

3942
/**
4043
* Configures the {@link AuditingHandler} to be used to set the current auditor on the domain types touched.
@@ -48,6 +51,17 @@ public void setAuditingHandler(ObjectFactory<AuditingHandler> auditingHandler) {
4851
this.handler = auditingHandler.getObject();
4952
}
5053

54+
/**
55+
* Configures a {@link JdbcMappingContext} that use for judging whether new object or not.
56+
* @param context must not be {@literal null}
57+
*/
58+
public void setJdbcMappingContext(JdbcMappingContext context) {
59+
60+
Assert.notNull(context, "JdbcMappingContext must not be null!");
61+
62+
this.context = context;
63+
}
64+
5165
/**
5266
* {@inheritDoc}
5367
*
@@ -59,11 +73,14 @@ public void onApplicationEvent(BeforeSaveEvent event) {
5973
if (handler != null) {
6074

6175
event.getOptionalEntity().ifPresent(entity -> {
62-
63-
if (event.getId().getOptionalValue().isPresent()) {
64-
handler.markModified(entity);
65-
} else {
76+
@SuppressWarnings("unchecked")
77+
Class<Object> entityType = event.getChange().getEntityType();
78+
JdbcPersistentEntityInformation<Object, ?> entityInformation =
79+
context.getRequiredPersistentEntityInformation(entityType);
80+
if (entityInformation.isNew(entity)) {
6681
handler.markCreated(entity);
82+
} else {
83+
handler.markModified(entity);
6784
}
6885
});
6986
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.lang.annotation.Annotation;
1919

20+
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
2021
import org.springframework.beans.factory.config.BeanDefinition;
2122
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
2223
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
@@ -83,6 +84,7 @@ protected void registerAuditListenerBeanDefinition(BeanDefinition auditingHandle
8384
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(listenerClass);
8485
builder.addPropertyValue("auditingHandler",
8586
ParsingUtils.getObjectFactoryBeanDefinition(getAuditingHandlerBeanName(), null));
87+
builder.setAutowireMode(AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE);
8688
registerInfrastructureBeanWithId(builder.getRawBeanDefinition(), listenerClass.getName(), registry);
8789
}
8890

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ interface AuditingAnnotatedDummyEntityRepository extends CrudRepository<Auditing
199199
@Data
200200
static class AuditingAnnotatedDummyEntity {
201201

202-
@Id Long id;
202+
@Id long id;
203203
@CreatedBy String createdBy;
204204
@CreatedDate LocalDateTime createdDate;
205205
@LastModifiedBy String lastModifiedBy;

0 commit comments

Comments
 (0)