我很确定您在很长一段时间后找到了解决方案,但是,由于我遇到了同样的问题(并且找不到有关如何解决的任何帮助),因此我发布了自己的解决方案,以防有人在同一个地方。
首先,假设我的课程如下,
public class MyClass {
private String id;
private String name;
// All the Getters, Setters, Constructors, etc
}
结果,等效的自动生成的 QueryDSL 类将是QMyClass
我所做的是通过迭代我的 Collection 手动创建我的 BooleanExpression ,如下所示(假设集合是List<String> ids
and List<String> names
),
QMyClass myClass = QMyClass.myClass;
BooleanExpression be = null;
if (!CollectionUtils.isEmpty(ids)) {
be = myClass.id.equalsIgnoreCase(ids.get(0));
if (ids.size() > 1) {
for (int i = 1; i < ids.size(); i++) {
be = be.or(myClass.id.equalsIgnoreCase(ids.get(i)));
}
}
}
if (!CollectionUtils.isEmpty(names)) {
be = be.and(myClass.name.equalsIgnoreCase(names.get(0)));
if (names.size() > 1) {
for (int i = 1; i < names.size(); i++) {
be = be.or(myClass.name.equalsIgnoreCase(names.get(i)));
}
}
}
在那之后,剩下的就很容易了。我只需要扩展 MyClassRepository 接口如下(为了利用 QueryDSL 功能),
public interface MyClassRepository extends extends JpaRepository<MyClass, Serializable>, QuerydslPredicateExecutor {
...
}
最后,我使用了findAll Repository 方法(由于 QueryDSL,现在默认扩展)如下(我也使用了 Pageable 用于我的案例,但这当然是可选的),
Page<MyClass> myClassList = this.myClassRepository(be, pageable);