Skip to content

PersistentPropertyPathAccessor does not skip nested null intermediates when setting values [DATACMNS-1296] #1738

@spring-projects-issues

Description

@spring-projects-issues

Kazuki Shimizu opened DATACMNS-1296 and commented

The annotation based auditing(supported by DATACMNS-1274) does not work when a nested bean is null.
I think should be ignore when a target nested bean is null.

class Embedded {

	@CreatedDate Instant created;
	@CreatedBy String creator;
	@LastModifiedDate Instant modified;
	@LastModifiedBy String modifier;
}

class WithEmbedded {
	Embedded embedded;
}
@Test
public void writesNestedAuditingDataWhenDataIsNull() {

	WithEmbedded target = new WithEmbedded();
//	target.embedded = new Embedded();

	Optional<AuditableBeanWrapper> wrapper = factory.getBeanWrapperFor(target);

	assertThat(wrapper).hasValueSatisfying(it -> {

		Instant now = Instant.now();
		String user = "user";

		it.setCreatedBy(user);
		it.setLastModifiedBy(user);
		it.setLastModifiedDate(now);
		it.setCreatedDate(now);

		Embedded embedded = target.embedded;

		assertThat(embedded).isNull();

	});
}

Test result is as follow:

writesNestedAuditingDataWhenObjectIsNull(org.springframework.data.auditing.MappingAuditableBeanWrapperFactoryUnitTests)  Time elapsed: 1.035 sec  <<< ERROR!
org.springframework.data.mapping.MappingException: Cannot lookup property org.springframework.data.auditing.MappingAuditableBeanWrapperFactoryUnitTests$Embedded org.springframework.data.auditing.MappingAuditableBeanWrapperFactoryUnitTests$WithEmbedded.embedded on null intermediate! Original path was: embedded.creator on org.springframework.data.auditing.MappingAuditableBeanWrapperFactoryUnitTests$WithEmbedded.
        at org.springframework.data.auditing.MappingAuditableBeanWrapperFactoryUnitTests.lambda$writesNestedAuditingDataWhenObjectIsNull$6(MappingAuditableBeanWrapperFactoryUnitTests.java:223)
        at org.springframework.data.auditing.MappingAuditableBeanWrapperFactoryUnitTests.writesNestedAuditingDataWhenObjectIsNull(MappingAuditableBeanWrapperFactoryUnitTests.java:218)

Same issue is occurred on DATAJDBC-204 (spring-projects/spring-data-relational#64)


Affects: 2.1 M2 (Lovelace), 2.4 M1 (2020.0.0), 2.1.19 (Lovelace SR19), 2.2.9 (Moore SR9), 2.3.2 (Neumann SR2)

Backported to: 2.3.3 (Neumann SR3)

11 votes, 10 watchers

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions