Skip to content

Commit 079c177

Browse files
committed
Add support for embeddable mapping to QueryMapper and UpdateMapper.
We now support querying, updating, sorting and projecting embeddables by resolving these to their individual columns. Closes #2011 Original pull request: #2114
1 parent c6a0c8b commit 079c177

File tree

9 files changed

+636
-55
lines changed

9 files changed

+636
-55
lines changed

spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/core/DefaultStatementMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ protected List<Expression> getSelectList(SelectSpec selectSpec, @Nullable Relati
143143
List<Expression> mapped = new ArrayList<>(selectList.size());
144144

145145
for (Expression expression : selectList) {
146-
mapped.add(updateMapper.getMappedObject(expression, entity));
146+
mapped.addAll(updateMapper.getMappedObjects(expression, entity));
147147
}
148148

149149
return mapped;

spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplate.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import reactor.core.publisher.Mono;
2424

2525
import java.util.Collections;
26-
import java.util.HashMap;
26+
import java.util.LinkedHashMap;
2727
import java.util.LinkedHashSet;
2828
import java.util.List;
2929
import java.util.Map;
@@ -34,6 +34,7 @@
3434
import java.util.stream.Collectors;
3535

3636
import org.reactivestreams.Publisher;
37+
3738
import org.springframework.beans.BeansException;
3839
import org.springframework.beans.factory.BeanFactory;
3940
import org.springframework.beans.factory.BeanFactoryAware;
@@ -60,7 +61,6 @@
6061
import org.springframework.data.r2dbc.mapping.event.BeforeSaveCallback;
6162
import org.springframework.data.relational.core.conversion.AbstractRelationalConverter;
6263
import org.springframework.data.relational.core.mapping.PersistentPropertyTranslator;
63-
import org.springframework.data.relational.core.mapping.RelationalMappingContext;
6464
import org.springframework.data.relational.core.mapping.RelationalPersistentEntity;
6565
import org.springframework.data.relational.core.mapping.RelationalPersistentProperty;
6666
import org.springframework.data.relational.core.query.Criteria;
@@ -621,18 +621,20 @@ private <T> Mono<T> doUpdate(T entity, SqlIdentifier tableName) {
621621
return maybeCallBeforeSave(entityToUse, outboundRow, tableName) //
622622
.flatMap(onBeforeSave -> {
623623

624-
Map<SqlIdentifier, Object> idValues = new HashMap<>();
625-
((RelationalMappingContext) mappingContext).getAggregatePath(persistentEntity).getTableInfo()
626-
.idColumnInfos().forEach((ap, ci) -> idValues.put(ci.name(), outboundRow.remove(ci.name())));
624+
Map<SqlIdentifier, Object> idValues = new LinkedHashMap<>();
625+
List<SqlIdentifier> identifierColumns = dataAccessStrategy.getIdentifierColumns(persistentEntity.getType());
626+
Assert.state(!identifierColumns.isEmpty(), entityToUse + " has no Identifier. Update is not possible.");
627+
628+
identifierColumns.forEach(sqlIdentifier -> {
629+
idValues.put(sqlIdentifier, outboundRow.remove(sqlIdentifier));
630+
});
627631

628632
persistentEntity.forEach(p -> {
629633
if (p.isInsertOnly()) {
630634
outboundRow.remove(p.getColumnName());
631635
}
632636
});
633637

634-
Assert.state(!idValues.isEmpty(), entityToUse + " has no id. Update is not possible");
635-
636638
Criteria criteria = null;
637639
for (Map.Entry<SqlIdentifier, Object> idAndValue : idValues.entrySet()) {
638640
if (criteria == null) {

0 commit comments

Comments
 (0)