Browse Source

Wrap associations in EmbeddedRelationalPersistentEntity.

We now also wrap associations to ensure embedded prefix propagation.

Closes #1695
pull/1713/head
Mark Paluch 2 years ago
parent
commit
04bf61598e
No known key found for this signature in database
GPG Key ID: 55BC6374BAA9D973
  1. 21
      spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/SqlGeneratorEmbeddedUnitTests.java
  2. 8
      spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/EmbeddedRelationalPersistentEntity.java

21
spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/SqlGeneratorEmbeddedUnitTests.java

@ -24,12 +24,14 @@ import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Id;
import org.springframework.data.jdbc.core.PersistentPropertyPathTestUtils; import org.springframework.data.jdbc.core.PersistentPropertyPathTestUtils;
import org.springframework.data.jdbc.core.mapping.AggregateReference;
import org.springframework.data.jdbc.core.mapping.JdbcMappingContext; import org.springframework.data.jdbc.core.mapping.JdbcMappingContext;
import org.springframework.data.relational.core.mapping.Column; import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Embedded; import org.springframework.data.relational.core.mapping.Embedded;
import org.springframework.data.relational.core.mapping.Embedded.OnEmpty; import org.springframework.data.relational.core.mapping.Embedded.OnEmpty;
import org.springframework.data.relational.core.mapping.RelationalMappingContext; import org.springframework.data.relational.core.mapping.RelationalMappingContext;
import org.springframework.data.relational.core.mapping.RelationalPersistentEntity; import org.springframework.data.relational.core.mapping.RelationalPersistentEntity;
import org.springframework.data.relational.core.mapping.Table;
import org.springframework.data.relational.core.sql.Aliased; import org.springframework.data.relational.core.sql.Aliased;
import org.springframework.data.relational.core.sql.SqlIdentifier; import org.springframework.data.relational.core.sql.SqlIdentifier;
import org.springframework.lang.Nullable; import org.springframework.lang.Nullable;
@ -38,6 +40,7 @@ import org.springframework.lang.Nullable;
* Unit tests for the {@link SqlGenerator} in a context of the {@link Embedded} annotation. * Unit tests for the {@link SqlGenerator} in a context of the {@link Embedded} annotation.
* *
* @author Bastian Wilhelm * @author Bastian Wilhelm
* @author Mark Paluch
*/ */
public class SqlGeneratorEmbeddedUnitTests { public class SqlGeneratorEmbeddedUnitTests {
@ -213,6 +216,12 @@ public class SqlGeneratorEmbeddedUnitTests {
SqlIdentifier.unquoted("test")); SqlIdentifier.unquoted("test"));
} }
@Test // GH-1695
public void columnForEmbeddedPropertyWithPrefix() {
assertThat(generatedColumn("nested.childId", WithEmbeddedAndAggregateReference.class))
.hasToString("a.nested_child_id AS nested_child_id");
}
@Test // DATAJDBC-340 @Test // DATAJDBC-340
public void noColumnForEmbedded() { public void noColumnForEmbedded() {
@ -352,4 +361,16 @@ public class SqlGeneratorEmbeddedUnitTests {
String value; String value;
} }
@Table("a")
record WithEmbeddedAndAggregateReference(@Id long id,
@Embedded.Nullable(prefix = "nested_") WithAggregateReference nested) {
}
record WithAggregateReference(AggregateReference<Child, Long> childId) {
}
record Child(@Id long id) {
}
} }

8
spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/EmbeddedRelationalPersistentEntity.java

@ -190,12 +190,16 @@ class EmbeddedRelationalPersistentEntity<T> implements RelationalPersistentEntit
@Override @Override
public void doWithAssociations(AssociationHandler<RelationalPersistentProperty> handler) { public void doWithAssociations(AssociationHandler<RelationalPersistentProperty> handler) {
delegate.doWithAssociations(handler); delegate.doWithAssociations((AssociationHandler<RelationalPersistentProperty>) association -> {
handler.doWithAssociation(new Association<>(wrap(association.getInverse()), wrap(association.getObverse())));
});
} }
@Override @Override
public void doWithAssociations(SimpleAssociationHandler handler) { public void doWithAssociations(SimpleAssociationHandler handler) {
delegate.doWithAssociations(handler); delegate.doWithAssociations((AssociationHandler<RelationalPersistentProperty>) association -> {
handler.doWithAssociation(new Association<>(wrap(association.getInverse()), wrap(association.getObverse())));
});
} }
@Override @Override

Loading…
Cancel
Save