当前位置: 首页 > 知识库问答 >
问题:

QuerydslBinderCustomizer在Spring Data JPA 2.0.7中不工作

齐运诚
2023-03-14

我正在尝试使用< code > QuerydslBinderCustomizer 在我的Rest控制器中执行< code > @ querydslrpredicate 的用法。

我使用@Repository实现来执行自定义查询,并与表示查询访问级别的另一个表进行连接。

遵循文档

包含< code > QuerydslBinderCustomizer :< code > Spring-data-commons-2 . 0 . 7 . release . jar 的当前Spring JPA版本

问题:

我正在尝试在服务Execution.code字段中应用类似()操作,但我只接收基于eq()的谓词,并且根本不调用自定义方法。

我还尝试将代码放在基于接口的< code >存储库中,但没有成功。

存储库实现如下:

@Repository 
public class ServiceExecutionQueryRepositoryImpl extends JpaQuerydslBaseRepository<Long, ServiceExecution> implements ServiceExecutionQueryRepository, QuerydslBinderCustomizer<QServiceExecution>, QuerydslPredicateExecutor<ServiceExecution> {

    @Override
    public void customize(QuerydslBindings bindings, QServiceExecution serviceExecution) {

        bindings.bind(serviceExecution.code).first((path, value) -> path.likeIgnoreCase(StringUtils.like(value)));
        // breakpoint never hit this method.
        // bindings is not applied to the query
        ... another bindings

    }
}

资源方法调用:

    @GetMapping("/service-executions")
    public ResponseEntity<Page<ServiceExecutionDTO>> getAllServiceExecutions(
        @RequestParam(required = false) MultiValueMap<String, String> parameters,
        @QuerydslPredicate(root = ServiceExecution.class) Predicate predicate, Pageable pageable) {
        Page<ServiceExecutionDTO> page = facade.findAll(parameters, predicate, pageable);
        return new ResponseEntity<>(page, HttpStatus.OK);
    }

生成的结果查询(在应用程序日志中看到)始终是这个(包括计数查询):

从…中选择o,其中code=

有人知道我可能错过了什么吗?是不是和最近的Spring数据JPA版有关系?

详:

这是一个为Spring Boot使用的gradle项目,apt已配置。除了这个问题,Querydsl目前正在按预期工作。

可以检查每个方法上的谓词并转换为类似(我不知道是否/知道这是可能的),但即使有可能,这听起来也不是一个好的解决方法。

文档: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#core.web.binding

我学习过的教程之一:https://spring.io/blog/2015/09/04/what-s-new-in-spring-data-release-gosling

相似问题:Spring @ query DSL谓词问题

对映射字段的关键字进行QueryDsl web查询(无效,因为它使用了以前版本的spring)编辑

似乎查询绑定工厂只加载绑定的接口。

我正在使用一个带有@NoRepositoryBean的接口,该接口未在搜索自定义绑定的映射中列出。也许这就是查询浏览器客户端未被调用并添加到应用程序绑定的原因。

不管怎样,我还是不知道怎么解决这个问题。


共有1个答案

赵智
2023-03-14

似乎您只是忘记了将ServiceExecutionQueryRepositoryImpl添加为@QuerydslPredicateannotation的bindings参数:

@GetMapping("/service-executions")
public ResponseEntity<Page<ServiceExecutionDTO>> getAllServiceExecutions(
    @RequestParam(required = false) MultiValueMap<String, String> parameters,
    @QuerydslPredicate(root = ServiceExecution.class, bindings = ServiceExecutionQueryRepositoryImpl.class) Predicate predicate, 
    Pageable pageable
) {
    Page<ServiceExecutionDTO> page = facade.findAll(parameters, predicate, pageable);
    return new ResponseEntity<>(page, HttpStatus.OK);
}

请参阅可能的示例:sb-查询-sd-演示

 类似资料:
  • 我在RestController中对一个实体使用QuerydslPredicate,它有一个date对象,我希望能够查询给定日期之前/之后/之间的日期,希望有类似的东西 null

  • 我试图让ESLint让我使用对象的Rest/传播。尽管我尽了最大努力,我还是得到了这个错误: 当我悬停在椭圆上时(<代码>...)用红色弯弯曲曲。 我的看起来像这样: 我确信prefs正在被阅读,因为规则、插件和样式指南正在按预期工作。 要启用对象rest/spread,是这里的关键(哈哈),它似乎对其他人有用。然而,它拒绝为我工作。我不知所措 更新:我使用的是Visual Studio代码v1.

  • 我用NodeJS和Socketio开发了聊天程序。然后我部署到Heroku服务器,发现SocketIO在Heroku中不工作。 我已经检查了Heroku的日志,但什么都没有。但奇怪的是,它在localhost环境中工作,而不是在Heroku环境中。我想端口设置有些问题。 [服务器端代码] “客户端代码” 第一次,我只是使用代码,它在Localhost env中工作得很好。但是在部署到heroku之

  • 我使用一个包在Flutter中,它可以在Android上正常工作,但是当在ios模拟器上运行我的项目时,我在控制台中收到错误。 当我运行时,我得到以下错误,由于内容长度,我删除了错误的一些重复部分。 我在上面的错误中找不到任何相关消息这是 这就是我与pusher的连接方式 但在我注释掉上述文件和<code>pusher_client:^2.0.0<code>中的<code>时。yaml然后运行<c

  • 错误:活动:自2018-04-09周一16:35:28 IST以来失败(结果:退出代码);进程:22654 ExecStart=/usr/sbin/nginx(代码=退出,状态=1/失败)Apr 09 16:35:28 localhost。localdomain systemd[1]:无法启动nginx HTTP和反向代理服务器。

  • 我从官方网站学习Angular 4,我通过ngModel学习了双向数据绑定部分。但是,只要我将[(ngModel)]添加到组件模板中,我的应用程序就会停止工作,即使FormsModule已导入模块中。ts文件。组件未加载 我正在使用Visual Studio代码<这是我的应用程序。组成部分ts 这是一个应用程序。单元ts AppComponent没有加载,只是显示 加载。。。