带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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...