diff --git a/pom.xml b/pom.xml
index 4ffa5540e7..c3e7763d3d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
org.springframework.data
spring-data-jdbc
- 1.0.0.BUILD-SNAPSHOT
+ 1.0.0.DATAJDBC-120-SNAPSHOT
Spring Data JDBC
Spring Data module for JDBC repositories.
diff --git a/src/main/java/org/springframework/data/jdbc/core/DefaultJdbcInterpreter.java b/src/main/java/org/springframework/data/jdbc/core/DefaultJdbcInterpreter.java
index 41195a51b0..e6aadeeb56 100644
--- a/src/main/java/org/springframework/data/jdbc/core/DefaultJdbcInterpreter.java
+++ b/src/main/java/org/springframework/data/jdbc/core/DefaultJdbcInterpreter.java
@@ -25,7 +25,6 @@
import org.springframework.data.jdbc.core.conversion.DbAction.Insert;
import org.springframework.data.jdbc.core.conversion.DbAction.Update;
import org.springframework.data.jdbc.core.conversion.Interpreter;
-import org.springframework.data.jdbc.mapping.event.Identifier;
import org.springframework.data.jdbc.mapping.model.JdbcMappingContext;
import org.springframework.data.jdbc.mapping.model.JdbcPersistentEntity;
@@ -74,7 +73,7 @@ public void interpret(Update update) {
public void interpret(Delete delete) {
if (delete.getPropertyPath() == null) {
- template.doDelete(Identifier.of(delete.getRootId()), Optional.ofNullable(delete.getEntity()),
+ template.doDelete(delete.getRootId(), Optional.ofNullable(delete.getEntity()),
delete.getEntityType());
} else {
template.doDelete(delete.getRootId(), delete.getPropertyPath());
diff --git a/src/main/java/org/springframework/data/jdbc/core/EntityRowMapper.java b/src/main/java/org/springframework/data/jdbc/core/EntityRowMapper.java
index 667827c90c..fcfa92116b 100644
--- a/src/main/java/org/springframework/data/jdbc/core/EntityRowMapper.java
+++ b/src/main/java/org/springframework/data/jdbc/core/EntityRowMapper.java
@@ -128,10 +128,11 @@ public T getParameterValue(Parameter parameter) {
return null;
}
+ String column = prefix + name;
try {
- return conversionService.convert(resultSet.getObject(prefix + name), parameter.getType().getType());
+ return conversionService.convert(resultSet.getObject(column), parameter.getType().getType());
} catch (SQLException o_O) {
- throw new MappingException(String.format("Couldn't read column %s from ResultSet.", name), o_O);
+ throw new MappingException(String.format("Couldn't read column %s from ResultSet.", column), o_O);
}
}
}
diff --git a/src/main/java/org/springframework/data/jdbc/core/EventPublishingEntityRowMapper.java b/src/main/java/org/springframework/data/jdbc/core/EventPublishingEntityRowMapper.java
index a543cd4494..8b39ee144f 100644
--- a/src/main/java/org/springframework/data/jdbc/core/EventPublishingEntityRowMapper.java
+++ b/src/main/java/org/springframework/data/jdbc/core/EventPublishingEntityRowMapper.java
@@ -50,7 +50,7 @@ public T mapRow(ResultSet resultSet, int i) throws SQLException {
T instance = delegate.mapRow(resultSet, i);
- publisher.publishEvent(new AfterCreation(Identifier.of(entityInformation.getRequiredId(instance)), instance));
+ publisher.publishEvent(new AfterCreation(Identifier.of(entityInformation.getRequiredId(instance)), instance, null));
return instance;
}
diff --git a/src/main/java/org/springframework/data/jdbc/core/JdbcEntityTemplate.java b/src/main/java/org/springframework/data/jdbc/core/JdbcEntityTemplate.java
index e55754fbd5..6e596c0b67 100644
--- a/src/main/java/org/springframework/data/jdbc/core/JdbcEntityTemplate.java
+++ b/src/main/java/org/springframework/data/jdbc/core/JdbcEntityTemplate.java
@@ -36,11 +36,9 @@
import org.springframework.data.jdbc.core.conversion.JdbcEntityDeleteWriter;
import org.springframework.data.jdbc.core.conversion.JdbcEntityWriter;
import org.springframework.data.jdbc.mapping.event.AfterDelete;
-import org.springframework.data.jdbc.mapping.event.AfterInsert;
-import org.springframework.data.jdbc.mapping.event.AfterUpdate;
+import org.springframework.data.jdbc.mapping.event.AfterSave;
import org.springframework.data.jdbc.mapping.event.BeforeDelete;
-import org.springframework.data.jdbc.mapping.event.BeforeInsert;
-import org.springframework.data.jdbc.mapping.event.BeforeUpdate;
+import org.springframework.data.jdbc.mapping.event.BeforeSave;
import org.springframework.data.jdbc.mapping.event.Identifier;
import org.springframework.data.jdbc.mapping.event.Identifier.Specified;
import org.springframework.data.jdbc.mapping.model.BasicJdbcPersistentEntityInformation;
@@ -102,14 +100,29 @@ private static GenericConversionService getDefaultConversionService() {
@Override
public void save(T instance, Class domainType) {
- createChange(instance).executeWith(interpreter);
+
+ JdbcPersistentEntityInformation entityInformation = context.getRequiredPersistentEntityInformation(domainType);
+
+ AggregateChange change = createChange(instance);
+
+ publisher.publishEvent(new BeforeSave( //
+ Identifier.ofNullable(entityInformation.getId(instance)), //
+ instance, //
+ change //
+ ));
+
+ change.executeWith(interpreter);
+
+ publisher.publishEvent(new AfterSave( //
+ Identifier.of(entityInformation.getId(instance)), //
+ instance, //
+ change //
+ ));
}
@Override
public void insert(T instance, Class domainType, Map additionalParameters) {
- publisher.publishEvent(new BeforeInsert(instance));
-
KeyHolder holder = new GeneratedKeyHolder();
JdbcPersistentEntity persistentEntity = getRequiredPersistentEntity(domainType);
JdbcPersistentEntityInformation entityInformation = context
@@ -132,23 +145,17 @@ public void insert(T instance, Class domainType, Map addi
throw new IllegalStateException(String.format(ENTITY_NEW_AFTER_INSERT, persistentEntity));
}
- publisher.publishEvent(new AfterInsert(Identifier.of(entityInformation.getRequiredId(instance)), instance));
-
}
@Override
public void update(S instance, Class domainType) {
JdbcPersistentEntity persistentEntity = getRequiredPersistentEntity(domainType);
- JdbcPersistentEntityInformation entityInformation = context
- .getRequiredPersistentEntityInformation(domainType);
- Specified specifiedId = Identifier.of(entityInformation.getRequiredId(instance));
- publisher.publishEvent(new BeforeUpdate(specifiedId, instance));
operations.update(sql(domainType).getUpdate(), getPropertyMap(instance, persistentEntity));
- publisher.publishEvent(new AfterUpdate(specifiedId, instance));
}
+ @SuppressWarnings("ConstantConditions")
@Override
public long count(Class> domainType) {
return operations.getJdbcOperations().queryForObject(sql(domainType).getCount(), Long.class);
@@ -211,9 +218,21 @@ public void deleteAll(Class> domainType) {
change.executeWith(interpreter);
}
- void doDelete(Object rootId, PropertyPath propertyPath) {
+ private void deleteTree(Object id, Object entity, Class> domainType) {
- JdbcPersistentEntity> entityToDelete = context.getRequiredPersistentEntity(propertyPath.getTypeInformation());
+ AggregateChange change = createDeletingChange(id, entity, domainType);
+
+ Specified specifiedId = Identifier.of(id);
+ Optional