diff --git a/pom.xml b/pom.xml
index 680dddf736..d147ba7d53 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-relational-parent
- 1.1.0.BUILD-SNAPSHOT
+ 1.1.0.DATAJDBC-370-SNAPSHOT
pom
Spring Data Relational Parent
diff --git a/spring-data-jdbc-distribution/pom.xml b/spring-data-jdbc-distribution/pom.xml
index f6d4373844..8945528d0d 100644
--- a/spring-data-jdbc-distribution/pom.xml
+++ b/spring-data-jdbc-distribution/pom.xml
@@ -14,7 +14,7 @@
org.springframework.data
spring-data-relational-parent
- 1.1.0.BUILD-SNAPSHOT
+ 1.1.0.DATAJDBC-370-SNAPSHOT
../pom.xml
diff --git a/spring-data-jdbc/pom.xml b/spring-data-jdbc/pom.xml
index cfb1e9443b..9ed7427d84 100644
--- a/spring-data-jdbc/pom.xml
+++ b/spring-data-jdbc/pom.xml
@@ -5,7 +5,7 @@
4.0.0
spring-data-jdbc
- 1.1.0.BUILD-SNAPSHOT
+ 1.1.0.DATAJDBC-370-SNAPSHOT
Spring Data JDBC
Spring Data module for JDBC repositories.
@@ -14,7 +14,7 @@
org.springframework.data
spring-data-relational-parent
- 1.1.0.BUILD-SNAPSHOT
+ 1.1.0.DATAJDBC-370-SNAPSHOT
diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/BasicJdbcConverter.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/BasicJdbcConverter.java
index 7b9a48f33f..70289e008f 100644
--- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/BasicJdbcConverter.java
+++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/BasicJdbcConverter.java
@@ -30,7 +30,6 @@
import org.springframework.data.jdbc.core.mapping.AggregateReference;
import org.springframework.data.jdbc.support.JdbcUtil;
import org.springframework.data.mapping.MappingException;
-import org.springframework.data.mapping.PersistentEntity;
import org.springframework.data.mapping.PersistentPropertyAccessor;
import org.springframework.data.mapping.PreferredConstructor;
import org.springframework.data.mapping.context.MappingContext;
@@ -53,6 +52,7 @@
*
* @author Mark Paluch
* @author Jens Schauder
+ * @author Christoph Strobl
* @see MappingContext
* @see SimpleTypeHolder
* @see CustomConversions
@@ -285,30 +285,22 @@ public ReadingContext(RelationalPersistentEntity entity, DataAccessStrategy a
}
private ReadingContext> extendBy(RelationalPersistentProperty property) {
- return new ReadingContext<>(entity, accessStrategy, resultSet, path.extendBy(property));
+ return new ReadingContext(getMappingContext().getRequiredPersistentEntity(property.getActualType()),
+ accessStrategy, resultSet, path.extendBy(property));
}
T mapRow() {
RelationalPersistentProperty idProperty = entity.getIdProperty();
- Object idValue = null;
- if (idProperty != null) {
- idValue = readFrom(idProperty);
- }
+ Object idValue = idProperty == null ? null : readFrom(idProperty);
- T result = createInstanceInternal(entity, idValue);
-
- return entity.requiresPropertyPopulation() //
- ? populateProperties(result) //
- : result;
+ return createInstanceInternal(idValue);
}
- private T populateProperties(T result) {
-
- PersistentPropertyAccessor propertyAccessor = getPropertyAccessor(entity, result);
+ private T populateProperties(T instance, @Nullable Object idValue) {
- Object id = idProperty == null ? null : readFrom(idProperty);
+ PersistentPropertyAccessor propertyAccessor = getPropertyAccessor(entity, instance);
PreferredConstructor persistenceConstructor = entity.getPersistenceConstructor();
@@ -318,7 +310,7 @@ private T populateProperties(T result) {
continue;
}
- propertyAccessor.setProperty(property, readOrLoadProperty(id, property));
+ propertyAccessor.setProperty(property, readOrLoadProperty(idValue, property));
}
return propertyAccessor.getBean();
@@ -354,31 +346,38 @@ private Object readFrom(RelationalPersistentProperty property) {
Object value = getObjectFromResultSet(path.extendBy(property).getColumnAlias());
return readValue(value, property.getTypeInformation());
-
}
- @SuppressWarnings("unchecked")
- private Object readEmbeddedEntityFrom(@Nullable Object id, RelationalPersistentProperty property) {
+ @Nullable
+ private Object readEmbeddedEntityFrom(@Nullable Object idValue, RelationalPersistentProperty property) {
- ReadingContext newContext = extendBy(property);
+ ReadingContext> newContext = extendBy(property);
+ return newContext.hasInstanceValues(idValue) ? newContext.createInstanceInternal(idValue) : null;
+ }
- RelationalPersistentEntity> entity = getMappingContext().getRequiredPersistentEntity(property.getActualType());
+ private boolean hasInstanceValues(Object idValue) {
- Object instance = newContext.createInstanceInternal(entity, null);
+ RelationalPersistentEntity> persistentEntity = path.getLeafEntity();
- PersistentPropertyAccessor> accessor = getPropertyAccessor((PersistentEntity