【问题标题】:Multiple aliases with QuerydslBinderCustomizerQuerydslBinderCustomizer 的多个别名
【发布时间】:2018-05-04 17:07:28
【问题描述】:

我在我的 RestController 中对具有日期对象的实体使用 QuerydslPredicate,我希望能够查询给定日期之前/之后/之间的日期,希望有类似的东西

  • GET /problems?createdOnAfter=XXX
  • GET /problems?createdOnBefore=YYY
  • GET /problems?createdOnAfter=XXX&createdOnBefore=YYY

我的实体有日期字段createdOn,我希望我可以使用多个别名自定义实体路径的绑定,即添加别名createdOnAfter & createdOnBefore - 看起来我不能创建多个别名,例如

@Repository
public interface ProblemRepository extends JpaRepository<Problem, String>, QueryDslPredicateExecutor<Problem>,
        QuerydslBinderCustomizer<QProblem> {

            ....

    @Override
    default void customize(QuerydslBindings bindings, QProblem root) {
        bindings.bind(root.createdOn).as("createdOnAfter").first(TemporalExpression::after);
        bindings.bind(root.createdOn).as("createdOnBefore").first(TemporalExpression::before);
    }
}

前面的别名显然覆盖了后面的别名。

避免手动创建谓词的正确方法是什么?

【问题讨论】:

  • 我希望能够使用 createdOnAfter、createdOnBefore 或两者兼有 - 该解决方案意味着我每次都必须提供 2 个日期

标签: spring spring-data-jpa querydsl spring-restcontroller


【解决方案1】:

为什么不使用 QueryDSL 谓词?你可以这样做:

@GetMapping("/problems")
@Timed
public ResponseEntity<List<ProblemDTO>> getAllProblems(
      @RequestParam(required = false) LocalDateTime createdOnAfter, 
      @RequestParam(required = false) LocalDateTime createdOnBefore,
      @ApiParam Pageable pageable) {
    BooleanBuilder where = new BooleanBuilder();
    if (startDate != null) {
        where = where.and(problem.createdOn.after(createdOnAfter));
    }
    if (endDate != null) {
        where = where.and(problem.createdOn.before(createdOnBefore));
    }
    Page<Donnee> page = problemRepository.findAll(where, pageable);
    return new ResponseEntity<>(problemMapper.toDTO(page.getContent())), null, HttpStatus.OK);
}

希望对你有帮助, 问候

【讨论】:

  • 好吧,如果您的选择数量有限,它肯定会有所帮助。但这不是一个答案,而是一种解决方法。是否有正确的方法来为每个字段指定多个“别名”或“谓词”?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-30
  • 2015-11-24
  • 2015-05-21
  • 2012-03-04
  • 1970-01-01
  • 2010-10-19
相关资源
最近更新 更多