spring-projects / spring-projects/spring-data-relational

Make sure referenced immutable Entities get updated in collections even if the immutable parent doesn't have an explicit id [DATAJDBC-433]

Open
#653 0 comments 0 reactions 1 assignee View on GitHub

@schauder is already working on this.

Since Dec 31, 2020.

type: bug
Dominant language
Java
Stars
827
Forks
394
PR merge metrics
No merged PRs in 30d

Description

Jens Schauder opened DATAJDBC-433 and commented

If an entity A contains a collection List<C> with A and C both being immutable, A needs to get updated even though it might not have an id if C has or any of the classes it references directly or indirectly.

This was ensured by DATAJDBC-291 by the test below but it is not entirely sure it is still handled properly by the variant about to get merged.

	@Test 
	public void updatingCollectionInEntityWithoutId() {

		CollectionOwner owner = new CollectionOwner(null, "owner", singletonList(new IdLessIntermediate("intermediate", singletonList(new Element(null, "Lovecraft")))));
		CollectionOwner saved = template.save(owner);

		Long id = saved.id;
		assertThat(id).isNotNull();

		Element savedLovecraft = saved.list.get(0).list.get(0);
		assertThat(savedLovecraft.id).isNotNull();

		CollectionOwner changedOwner = new CollectionOwner(id, "owner", singletonList(new IdLessIntermediate("intermediate", asList(savedLovecraft, new Element(null, "Sakurai")))));

		CollectionOwner savedAgain = template.save(changedOwner);

		SoftAssertions softly = new SoftAssertions();

		softly.assertThat(savedAgain.id).isEqualTo(id);
		softly.assertThat(savedAgain.list.get(0).list.get(0)).isEqualTo(savedLovecraft);
		softly.assertThat(savedAgain.list.get(0).list.get(1).id).describedAs("Element has id set and that element is part of the aggregate").isNotNull();

		softly.assertAll();
	}

Issue Links:

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.