带queryDSL的Spring Data Rest忽略了多值REST查询

问题描述

我正在尝试在Spring Data REST应用程序中使用queryDSL。我无法使其正常工作,因此我编写了可以轻松使用并看到相同结果的测试应用程序:除第一个搜索参数外的所有内容均被忽略。我的问题似乎是Multi-column "OR" in Spring Data Rest with QueryDsl一个副本,尚未得到解答。我正在使用Spring生成的REST控制器,并希望避免创建自定义控制器。我唯一需要的queryDSL定制是对所有为字符串的数据库字段使用不区分大小写的“ LIKE”,而不是完全匹配字符串。我的代码很简单。

实体:

@Data
@Entity
@Table(name="users")
public class User  {

   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   private Long id;

   @Column(name="first_name")
   private String firstName;

   @Column(name="last_name")
   private String lastName;

   @Column(name="email")
   private String email;

}

存储库:

@RepositoryRestResource(collectionResourceRel = "user",path = "user")
public interface UserRepository extends JpaRepository<User,Integer>,QuerydslPredicateExecutor<User>,QuerydslBinderCustomizer<QUser> {

    @Override
    default void customize(QuerydslBindings bindings,QUser root) {
        // use case-insensitive contains instead of exact match for all string values
        bindings.bind(String.class).all(new MultiValueBinding<StringPath,String> () {
           @Override
        public Optional<Predicate> bind(StringPath path,Collection<? extends String> values) {
            BooleanBuilder predicate = new BooleanBuilder();
            values.forEach( value -> predicate.and(path.containsIgnoreCase(value)));
            return Optional.of(predicate);
        }
    });
   }

当我执行curl请求时:

curl -i  http://localhost:8080/user?firstName=john&lastName=foo

即使数据库中不存在“ john foo”(但“ john doe”也存在),我也得到了一个条目。当我查看生成的Hibernate查询时,我看到正在使用我的queryDSL自定义,但是查询只有一个参数:

select user0_.id as id1_0_,user0_.email as email2_0_,user0_.first_name as first_na3_0_,user0_.last_name as last_nam4_0_ from users user0_ where lower(user0_.first_name) like ? escape '!' limit ?

要使用灵活的多参数查询搜索名字和姓氏,或按姓氏和电子邮件),我应该添加什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)