Skip to content

JDBC: QBE withIgnoreNullValues does not ignore nulls in embedded classes of the Example #1986

Open
@dschulten

Description

@dschulten

I have an example Spring Data Jdbc Aggregate Root (not JPA)

@RequiredArgsConstructor(access = AccessLevel.PACKAGE, onConstructor = @__(@PersistenceCreator))
public class Person implements AggregateRoot<Person, PersonIdentifier> {

   @Id private final PersonIdentifier id
   
    private String name;
    
    @Getter
    @Embedded 
    private Address address;
}

with an embedded VO record:

public record Address(String city, String street} implements ValueObject

When I have three people, two persons who live in streets of Heilbronn and one Person who lives in a street of Berlin, and I run this qbe Query on my QueryByExampleExecutor:

personRepository.findAll(
        Example.of(
            person,
            ExampleMatcher.matching().withIgnorePaths("id").withIgnoreNullValues()));

with this Person:

{
	"address": {		
		"city": "Heilbronn"
	}
}

I get no matches, because the generated query specifically asks for Persons with STREET = null. That only happens for embedded types - the generated query does not ask for persons where NAME == null, apparently because name is a top-level attribute. Log extract:

WHERE (("PERSON"."CITY" = ? AND "PERSON"."STREET" = ?))
Setting SQL statement parameter value: column index 1, parameter value [Heilbronn], value class [java.lang.String], SQL type 12
Setting SQL statement parameter value: column index 2, parameter value [null], value class [null], SQL type 12

I would expect two matches, all persons who live in Heilbronn.

Am I holding it wrong, or is ignoreNullValues simply not supported for embedded types?

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions