0

我有以下结构:

@Document
class A {
String value1;
B b;
}

class B {
String value1;
String value2;
Integer value3;
}

然后我保存具有以下值的文档:

{
value1: "val",
b: {
value1: "val1",
value2: "val2"
value3: 156
}
}

当我创建一个填充 B 中的两个值的示例时,我得到一个匹配项,当我只填充 A.value1 和 B.value1 时,我没有得到一个匹配项。如何使嵌套字段中的匹配项为空值?

搜索:

repository.findAll(Example.of(new A("val", new B("val1", null, null)))

不匹配,因为某些 B 字段未填写。

搜索:

repository.findAll(Example.of(new A("val", new B("val1", "val2", 156)))

匹配所有字段。

4

1 回答 1

1

这应该通过定义您自己的 ExampleMatcher 来工作:

ExampleMatcher exampleMatcher = ExampleMatcher.matchingAll();

然后查询将是:

repository.findAll(
    Example.of(new A("val", new B("val1", null, null)), exampleMatcher));

请参阅API 文档

创建一个包含所有非空属性的新 ExampleMatcher ,默认匹配从示例派生的所有谓词。

于 2021-06-23T10:05:28.307 回答