diff --git a/pom.xml b/pom.xml
index 7fc8f36b75..dd40bf4559 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-131-SNAPSHOT
Spring Data JDBC
Spring Data module for JDBC repositories.
diff --git a/src/main/java/org/springframework/data/jdbc/core/DataAccessStrategy.java b/src/main/java/org/springframework/data/jdbc/core/DataAccessStrategy.java
index 61f9b90ec7..dba854a348 100644
--- a/src/main/java/org/springframework/data/jdbc/core/DataAccessStrategy.java
+++ b/src/main/java/org/springframework/data/jdbc/core/DataAccessStrategy.java
@@ -29,7 +29,7 @@ public interface DataAccessStrategy {
void insert(T instance, Class domainType, Map additionalParameters);
- void update(S instance, Class domainType);
+ void update(T instance, Class domainType);
void delete(Object id, Class> domainType);
diff --git a/src/main/java/org/springframework/data/jdbc/core/DefaultDataAccessStrategy.java b/src/main/java/org/springframework/data/jdbc/core/DefaultDataAccessStrategy.java
index 81ebcac45e..9cba047827 100644
--- a/src/main/java/org/springframework/data/jdbc/core/DefaultDataAccessStrategy.java
+++ b/src/main/java/org/springframework/data/jdbc/core/DefaultDataAccessStrategy.java
@@ -37,6 +37,7 @@
import org.springframework.data.mapping.PropertyHandler;
import org.springframework.data.mapping.PropertyPath;
import org.springframework.data.repository.core.EntityInformation;
+import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations;
import org.springframework.jdbc.support.GeneratedKeyHolder;
@@ -71,7 +72,6 @@ public DefaultDataAccessStrategy(SqlGeneratorSource sqlGeneratorSource, NamedPar
/**
* Creates a {@link DefaultDataAccessStrategy} which references it self for resolution of recursive data accesses.
- *
* Only suitable if this is the only access strategy in use.
*/
public DefaultDataAccessStrategy(SqlGeneratorSource sqlGeneratorSource, NamedParameterJdbcOperations operations,
@@ -192,15 +192,19 @@ public Iterable findAllById(Iterable> ids, Class domainType) {
return operations.query(findAllInListSql, parameter, getEntityRowMapper(domainType));
}
+ @SuppressWarnings("unchecked")
@Override
public Iterable findAllByProperty(Object rootId, JdbcPersistentProperty property) {
Class> actualType = property.getActualType();
- String findAllByProperty = sql(actualType).getFindAllByProperty(property.getReverseColumnName());
+ String findAllByProperty = sql(actualType).getFindAllByProperty(property.getReverseColumnName(),
+ property.getKeyColumn());
MapSqlParameterSource parameter = new MapSqlParameterSource(property.getReverseColumnName(), rootId);
- return (Iterable) operations.query(findAllByProperty, parameter, getEntityRowMapper(actualType));
+ return (Iterable)operations.query(findAllByProperty, parameter, property.isQualified() //
+ ? getMapEntityRowMapper(property) //
+ : getEntityRowMapper(actualType));
}
@Override
@@ -287,7 +291,12 @@ private EntityRowMapper getEntityRowMapper(Class domainType) {
return new EntityRowMapper<>(getRequiredPersistentEntity(domainType), conversions, context, accessStrategy);
}
+ private RowMapper getMapEntityRowMapper(JdbcPersistentProperty property) {
+ return new MapEntityRowMapper(getEntityRowMapper(property.getActualType()), property.getKeyColumn());
+ }
+
private MapSqlParameterSource createIdParameterSource(Object id, Class domainType) {
+
return new MapSqlParameterSource("id",
convert(id, getRequiredPersistentEntity(domainType).getRequiredIdProperty().getColumnType()));
}
@@ -313,5 +322,4 @@ private V convert(Object from, Class to) {
private SqlGenerator sql(Class> domainType) {
return sqlGeneratorSource.getSqlGenerator(domainType);
}
-
}
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 7d876d6c0a..3109078899 100644
--- a/src/main/java/org/springframework/data/jdbc/core/DefaultJdbcInterpreter.java
+++ b/src/main/java/org/springframework/data/jdbc/core/DefaultJdbcInterpreter.java
@@ -77,6 +77,13 @@ public void interpret(DeleteAll delete) {
private Map createAdditionalColumnValues(Insert insert) {
Map additionalColumnValues = new HashMap<>();
+ addDependingOnInformation(insert, additionalColumnValues);
+ additionalColumnValues.putAll(insert.getAdditionalValues());
+
+ return additionalColumnValues;
+ }
+
+ private void addDependingOnInformation(Insert insert, Map additionalColumnValues) {
DbAction dependingOn = insert.getDependingOn();
if (dependingOn != null) {
@@ -88,7 +95,5 @@ private Map createAdditionalColumnValues(Insert insert) {
additionalColumnValues.put(columnName, identifier);
}
- return additionalColumnValues;
}
-
}
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 fe5a513529..5100b5ae7e 100644
--- a/src/main/java/org/springframework/data/jdbc/core/EntityRowMapper.java
+++ b/src/main/java/org/springframework/data/jdbc/core/EntityRowMapper.java
@@ -19,6 +19,7 @@
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.util.Map;
import java.util.Set;
import org.springframework.core.convert.ConversionService;
@@ -80,6 +81,11 @@ public T mapRow(ResultSet resultSet, int rowNumber) throws SQLException {
if (Set.class.isAssignableFrom(property.getType())) {
propertyAccessor.setProperty(property, accessStrategy.findAllByProperty(id, property));
+ } else if (Map.class.isAssignableFrom(property.getType())) {
+
+ Iterable