首页 > 解决方案 > ExampleMatcher 配置用于查找具有空值的多个字段

问题描述

尝试使用 ExampleMatcher 查询查找多个字段。在下面的课程中,我们有 4 个字段:

public class contact {
  private String name;
  private long phoneNumber; //primary
  private String email;
  private String organization;

}

例如,现在我想使用名称和电子邮件字段进行搜索,而其他字段请求为空。结果应该是包含姓名和电子邮件请求的联系人列表。我的搜索请求获得未知数量的字段。

ExampleMatcher userExampleMatcher = ExampleMatcher.matchingAll()
            .withNullHandler(ExampleMatcher.NullHandler.IGNORE);
    Iterable<Contact> contacts = dao.findAll(Example.of(contactObject, userExampleMatcher));

此配置仅用于电话号码返回 true 结果,其他字段返回 null。

标签: javaspringjpaspring-dataquery-by-example

解决方案


如果Contact实体具有原始字段,则它们的默认值实际上将用于创建查询。

如果不设置phoneNumber,它会一直寻找phoneNumber = 0

您可以用Primitive字段替换Wrapper字段:

public class Contact {
    private String name;
    private Long phoneNumber;
    private String email;
    private String organization;
}

OR

您可以ignore通过手动指定这些字段的名称来原始字段:

ExampleMatcher userExampleMatcher = ExampleMatcher.matchingAll()
                .withIgnorePaths("phoneNumber").withIgnoreNullValues();

.withIgnoreNullValues()是代码中处理程序的简写.withNullHandler(ExampleMatcher.NullHandler.IGNORE)


推荐阅读