Skip to content

Commit f600442

Browse files
committed
Remove external column name prefixing for embedded entities.
Original pull request #1604 See #1586
1 parent d6d9957 commit f600442

File tree

8 files changed

+21
-53
lines changed

8 files changed

+21
-53
lines changed

Diff for: spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/QueryMapper.java

+1-11
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ private Condition mapEmbeddedObjectCondition(CriteriaDefinition criteria, MapSql
413413
Condition condition = null;
414414
for (RelationalPersistentProperty nestedProperty : persistentEntity) {
415415

416-
SqlIdentifier sqlIdentifier = nestedProperty.getColumnName().transform(prefix::concat);
416+
SqlIdentifier sqlIdentifier = nestedProperty.getColumnName();
417417
Object mappedNestedValue = convertValue(embeddedAccessor.getProperty(nestedProperty),
418418
nestedProperty.getTypeInformation());
419419
SQLType sqlType = converter.getTargetSqlType(nestedProperty);
@@ -768,16 +768,6 @@ public SqlIdentifier getMappedColumnName() {
768768
throw new IllegalStateException("Cannot obtain a single column name for embedded property");
769769
}
770770

771-
if (this.property != null && this.path != null && this.path.getParentPath() != null) {
772-
773-
RelationalPersistentProperty owner = this.path.getParentPath().getLeafProperty();
774-
775-
if (owner != null && owner.isEmbedded()) {
776-
return this.property.getColumnName()
777-
.transform(it -> Objects.requireNonNull(owner.getEmbeddedPrefix()).concat(it));
778-
}
779-
}
780-
781771
return this.path == null || this.path.getLeafProperty() == null ? super.getMappedColumnName()
782772
: this.path.getLeafProperty().getColumnName();
783773
}

Diff for: spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/AggregatePath.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -334,9 +334,8 @@ static ColumnInfo of(AggregatePath path) {
334334
// TODO: Multi-valued paths cannot be represented with a single column
335335
// Assert.isTrue(!path.isMultiValued(), () -> "Cannot obtain ColumnInfo for multi-valued path");
336336

337-
SqlIdentifier name = AggregatePathTableUtils.assembleColumnName(path,
338-
path.getRequiredLeafProperty().getColumnName());
339-
return new ColumnInfo(name, AggregatePathTableUtils.prefixWithTableAlias(path, name));
337+
SqlIdentifier columnName = path.getRequiredLeafProperty().getColumnName();
338+
return new ColumnInfo(columnName, AggregatePathTableUtils.prefixWithTableAlias(path, columnName));
340339
}
341340
}
342341
}

Diff for: spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/AggregatePathTableUtils.java

-12
Original file line numberDiff line numberDiff line change
@@ -33,18 +33,6 @@
3333
*/
3434
class AggregatePathTableUtils {
3535

36-
public static SqlIdentifier assembleColumnName(AggregatePath path, SqlIdentifier suffix) {
37-
return suffix.transform(constructEmbeddedPrefix(path)::concat);
38-
}
39-
40-
private static String constructEmbeddedPrefix(AggregatePath path) {
41-
42-
return path.stream() //
43-
.filter(p -> p != path) //
44-
.takeWhile(AggregatePath::isEmbedded).map(p -> p.getRequiredLeafProperty().getEmbeddedPrefix()) //
45-
.collect(new ReverseJoinCollector());
46-
}
47-
4836
public static SqlIdentifier prefixWithTableAlias(AggregatePath path, SqlIdentifier columnName) {
4937

5038
AggregatePath tableOwner = AggregatePathTraversal.getTableOwningPath(path);

Diff for: spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/AggregatePathTraversal.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ public static AggregatePath getIdDefiningPath(AggregatePath aggregatePath) {
3737

3838
public static AggregatePath getTableOwningPath(AggregatePath aggregatePath) {
3939

40-
Predicate<AggregatePath> idDefiningPathFilter = ap -> ap.isEntity() && !ap.isEmbedded();
40+
Predicate<AggregatePath> tableOwningPathFilter = ap -> ap.isEntity() && !ap.isEmbedded();
4141

42-
AggregatePath result = aggregatePath.filter(idDefiningPathFilter);
42+
AggregatePath result = aggregatePath.filter(tableOwningPathFilter);
4343
if (result == null) {
4444
throw new NoSuchElementException();
4545
}

Diff for: spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/EmbeddedContext.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,12 @@ public String getEmbeddedPrefix() {
3232

3333
public String withEmbeddedPrefix(String name) {
3434

35-
if (ownerProperty.getEmbeddedPrefix() != null) {
36-
return ownerProperty.getEmbeddedPrefix() + name;
35+
if (!ownerProperty.isEmbedded()) {
36+
return name;
37+
}
38+
String embeddedPrefix = ownerProperty.getEmbeddedPrefix();
39+
if (embeddedPrefix != null) {
40+
return embeddedPrefix + name;
3741
}
3842

3943
return name;

Diff for: spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/EmbeddedRelationalPersistentProperty.java

+5
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ public EmbeddedRelationalPersistentProperty(RelationalPersistentProperty delegat
4343
this.context = context;
4444
}
4545

46+
@Override
47+
public boolean isEmbedded() {
48+
return delegate.isEmbedded();
49+
}
50+
4651
@Nullable
4752
@Override
4853
public String getEmbeddedPrefix() {

Diff for: spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/PersistentPropertyPathExtension.java

+1-21
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ public SqlIdentifier getColumnName() {
214214

215215
Assert.state(path != null, "Path is null");
216216

217-
return assembleColumnName(path.getLeafProperty().getColumnName());
217+
return path.getLeafProperty().getColumnName();
218218
}
219219

220220
/**
@@ -451,26 +451,6 @@ private SqlIdentifier assembleTableAlias() {
451451

452452
}
453453

454-
private SqlIdentifier assembleColumnName(SqlIdentifier suffix) {
455-
456-
Assert.state(path != null, "Path is null");
457-
458-
if (path.getLength() <= 1) {
459-
return suffix;
460-
}
461-
462-
PersistentPropertyPath<? extends RelationalPersistentProperty> parentPath = path.getParentPath();
463-
RelationalPersistentProperty parentLeaf = parentPath.getLeafProperty();
464-
465-
if (!parentLeaf.isEmbedded()) {
466-
return suffix;
467-
}
468-
469-
String embeddedPrefix = parentLeaf.getEmbeddedPrefix();
470-
471-
return getParentPath().assembleColumnName(suffix.transform(embeddedPrefix::concat));
472-
}
473-
474454
private SqlIdentifier prefixWithTableAlias(SqlIdentifier columnName) {
475455

476456
SqlIdentifier tableAlias = getTableAlias();

Diff for: spring-data-relational/src/test/java/org/springframework/data/relational/core/mapping/DefaultAggregatePathUnitTests.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ void isEmbedded() {
200200
softly.assertThat(path().isEmbedded()).isFalse();
201201
softly.assertThat(path("withId").isEmbedded()).isFalse();
202202
softly.assertThat(path("second2.third").isEmbedded()).isFalse();
203+
softly.assertThat(path("second2.third2").isEmbedded()).isTrue();
203204
softly.assertThat(path("second2").isEmbedded()).isTrue();
204205

205206
});
@@ -390,8 +391,9 @@ void getRequiredLeafProperty() {
390391

391392
assertSoftly(softly -> {
392393

393-
softly.assertThat(path("second.third2.value").getRequiredLeafProperty())
394-
.isEqualTo(context.getRequiredPersistentEntity(Third.class).getPersistentProperty("value"));
394+
RelationalPersistentProperty prop = path("second.third2.value").getRequiredLeafProperty();
395+
softly.assertThat(prop.getName()).isEqualTo("value");
396+
softly.assertThat(prop.getOwner().getType()).isEqualTo(Third.class);
395397
softly.assertThat(path("second.third").getRequiredLeafProperty())
396398
.isEqualTo(context.getRequiredPersistentEntity(Second.class).getPersistentProperty("third"));
397399
softly.assertThat(path("secondList").getRequiredLeafProperty())

0 commit comments

Comments
 (0)