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]

Offen
#653 0 Kommentare 0 Reaktionen 1 zugewiesene Person Auf GitHub ansehen

@schauder arbeitet bereits daran.

Seit 31.12.2020.

type: bug
Vorherrschende Sprache
Java
Sterne
827
Forks
394
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

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:

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.