我正在尝试通过多个属性来实现对用户的搜索。假设我的 Person 有 Name 和 Lastname。我想输入“Michael Doe”并列出所有具有此姓名和姓氏的人。当我只输入“迈克尔”时,我想要所有迈克尔等等。
我试图通过使用如下谓词来实现它:
private static Specification<UserEntity> containsTextInAttributes(List<String> text, List<String> attributes) {
List<String> finalTextArray = text.stream().map(e -> "%"+e+"%").collect(Collectors.toList());
return (root, query, builder) -> builder.or(root.getModel().getDeclaredSingularAttributes().stream()
.filter(a -> attributes.contains(a.getName()))
.map(a -> builder.or(finalTextArray.stream().map(e -> builder.like(root.get(a.getName()), e)).toArray(Predicate[]::new)))
.toArray(Predicate[]::new)
);
}
public static Specification<UserEntity> containsTextInAllAttributes(List<String> text) {
return containsTextInAttributes(text, Arrays.asList("lastname", "firstname", "email", "phoneNumber"));
}
但是,当我搜索“Michael Doe”时,我找到了所有 Michaels 和 Lastname Doe。我该如何解决我的问题?
提前感谢您的帮助。