Spring(Boot)Data Rest和QueryDsl是否可以跨多个列执行“或”搜索?我已经自定义了绑定,以便当多次出现相同的搜索路径时将执行“或”搜索(MultiValueBinding)。 myentity?name=foo&name=bar
将返回name属性包含foo
或bar
的所有实体。
@Entity
MyEntity {
@Id
Long id;
String name;
String email;
}
@RepositoryRestResource(path = "myentity")
public interface MyEntityRepository extends CrudRepository<MyEntity,Long>,QuerydslPredicateExecutor<MyEntity>,QuerydslBinderCustomizer<QMyEntity> {
@Override
default void customize(QuerydslBindings bindings,QMyEntity root) {
bindings.bind(root.id).first(NumberExpression::eq);
bindings.bind(String.class).all((StringPath path,Collection<? extends String> values) -> {
BooleanBuilder predicate = new BooleanBuilder();
values.forEach(value -> predicate.or(path.containsIgnoreCase(value)));
return Optional.of(predicate);
});
}
}
在不实现自定义控制器的情况下,是否可以通过“或”连接多个路径中的搜索,以便myentity?name=foo&email=bar
返回结果,其中name属性包含“ foo”,或电子邮件属性包含“栏”。或者定义自定义路径,然后将其用于多列搜索?例如myentity?nameOrEmail=foo
。