【发布时间】:2019-10-18 19:19:29
【问题描述】:
我正在使用 QueryDSL JPA 开发 Spring Boot Web 应用程序。 我有一个 REST api,我可以在其中获取用户的表单输入。我必须执行多参数搜索。如果 users inpu 的值为 null(这没关系,因为并非所有字段都需要),我的查询构建器在查询数据库时应该跳过这个值。
在我的 QueryDSL 部分,我得到一个对象,例如“解决方案”,它可能看起来像这样:
票号:4261(整数)
错误标志:假(布尔)
statusOCIA:空(字符串)
描述:“点击图片时出错”(字符串)
我尝试使用 QueryDSL 中的 PathBuilder 和 BooleanBuilder 动态构建查询:
public List<Solution> findSolutionBySolutionQuerydsl(Solution searchSolution) {
QSolution solution = QSolution.solution;
JPAQuery<?> query = new JPAQuery<Void>(em);
BooleanBuilder builder = new BooleanBuilder();
PathBuilder<QSolution> QentityPath = new PathBuilder<QSolution>(QSolution.class, "solution");
PathBuilder<Solution> entityPath = new PathBuilder<Solution>(Solution.class, "serachSolution");
Field[] fields = searchSolution.getClass().getDeclaredFields();
for (Field attr : fields) {
if (searchSolution."here it should perform searchSolution.getTicketNumber or searchSolution.getDiscription depending on what attr.getName is" != null) {
builder.or(QentityPath.get(attr.getName()).eq(entityPath.get(attr.getName())));
}
}
List<Solution> s1 = query.select(solution)
.from(solution)
.where(builder)
.fetch();
System.out.println(("query: " + s1));
return s1;
}
我希望它可以像这样工作:如果 attr.getName 是“描述”,它应该执行 searchSolution.getDescription。
我尝试了一些使用 HashMap 或 ArrayList 的东西,但由于对象中的数据类型不同而失败。
我希望有人可以帮助我。
【问题讨论】:
-
Spring Data Web 扩展可以为您完成所有这些,无需任何代码。 docs.spring.io/spring-data/jpa/docs/current/reference/html/… 和 spring.io/blog/2015/09/04/…
-
谢谢!这看起来很有希望!稍后我会深入了解。
-
你能分享你得到的错误吗?例如,您是否遇到了一些例外情况?
标签: java spring spring-boot jpa querydsl