diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImpl.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImpl.java index 8ecc953b24..d9faf41745 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImpl.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImpl.java @@ -31,6 +31,7 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.Objects; import java.util.Set; import org.springframework.data.mapping.PersistentProperty; import org.springframework.data.mapping.PersistentPropertyAccessor; @@ -163,7 +164,7 @@ private void verifyChildHasParentId( Iterator childKeyParts = this.spannerSchemaUtils.getKey(childObject).getParts().iterator(); int partNum = 1; while (parentKeyParts.hasNext()) { - if (!childKeyParts.hasNext() || !parentKeyParts.next().equals(childKeyParts.next())) { + if (!childKeyParts.hasNext() || !Objects.equals(parentKeyParts.next(), childKeyParts.next())) { throw new SpannerDataException( "A child entity's common primary key parts with its parent must " + "have the same values. Primary key component " diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImplTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImplTests.java index aa3b1212d0..93f7d85907 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImplTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImplTests.java @@ -158,6 +158,19 @@ void insertChildrenMismatchIdTest() { + " com.google.cloud.spring.data.spanner.core.SpannerMutationFactoryImplTests$ChildEntity"); } + @Test + void insertChildrenNullIdTest() { + Parent parent = new Parent(); + parent.keyOne = "a"; + Child child = new Child(); + child.keyOne = "a"; + child.keyThree = 3L; + parent.children = Collections.singletonList(child); + + List mutations = this.spannerMutationFactory.insert(parent); + assertThat(mutations).hasSize(2); + } + @Test void updateTest() { executeWriteTest(t -> this.spannerMutationFactory.update(t, null), Op.UPDATE); @@ -270,4 +283,33 @@ private static class EmbeddedKeyComponents { @PrimaryKey(keyOrder = 2) String id2; } + + @Table + private static class Parent { + @PrimaryKey + @Column + String keyOne; + + @PrimaryKey(keyOrder = 2) + @Column + Long keyTwo; + + @Interleaved + List children; + } + + @Table + private static class Child { + @PrimaryKey + @Column + String keyOne; + + @PrimaryKey(keyOrder = 2) + @Column + Long keyTwo; + + @PrimaryKey(keyOrder = 3) + @Column + Long keyThree; + } }