【问题标题】:Parameter not set in JPA Native Query in Spring BootSpring Boot 的 JPA Native Query 中未设置参数
【发布时间】:2020-04-29 19:10:20
【问题描述】:

我正在 Spring Boot 中开发后端,我正在使用 JPA 进行所有数据库操作。问题如下:

我从前端收到一个名为“responsableServicio”的参数,首先它到达控制器方法,我检查了参数是否正确到达那里。但是,当参数从控制器转到存储库时,该值没有正确获取,它似乎是空的,因为我的查询应该返回 1 条记录并返回 0 条记录。

我想强调的是,如果我将参数硬编码在查询中,它会返回正确的结果 1。

我遵循了一些示例,但还没有工作。我究竟做错了什么?提前致谢

公式控制器

@PostMapping(path = "/getCountAnexos")
    @ResponseBody
    public String countAnexosRechazo(@RequestBody String responsableServicio) {
        Map<String, Object> json = new HashMap<String, Object>();
        // Cambiar a nativeQuery

        System.out.println("*******************************************");
        System.out.println("*******************************************");
        System.out.println(responsableServicio);
        System.out.println("*******************************************");
        System.out.println("*******************************************");
        String respuesta = formularioRepository.getAnexosRechazados(responsableServicio);
        System.out.printf("RESPUESTA",respuesta);

        return respuesta;
}

Formulario 存储库

// Consulta para obtener el numero de Anexos Rechazados de acuerdo el Usuario
    @Query(value = "SELECT COUNT(*) FROM formulario where year(fechaTramite)='2020' and responsableServicio = :responsableServicio and (estatusGestorContratos = 'Rechazado' or estatusAFTI = 'Rechazado')", nativeQuery = true)
    public abstract String getAnexosRechazados(@Param("responsableServicio") String responsableServicio);

我从控制台得到什么

img

【问题讨论】:

  • 你可以尝试硬编码控制器中的值吗?
  • @RyanGuamos 已经做到了。都没有用
  • 尝试使用确切的列名修改您的查询。不是驼峰式

标签: java mysql spring spring-boot jpa


【解决方案1】:

问题出在控制器类中。它将 String 作为带括号的完整 JSON。 在这里,您采用了 @PostMapping 并使用 @RequestBody String responsableServicio 作为方法参数。您不能将 String 作为类型参数,您必须创建一个具有 String responsableServicio 的类,作为其 getter/setter 的变量。 然后在控制器中将参数作为类参数。

class RequestDTO{
    String responsableServicio;
    public String getResponsableServicio() {
        return responsableServicio;
    }
    public void setResponsableServicio(String responsableServicio) {
        this.responsableServicio = responsableServicio;
    }
} 

把控制器写成

@PostMapping(path = "/getCountAnexos")
@ResponseBody
public String countAnexosRechazo(@RequestBody RequestDTO responsableServicio) {
    Map<String, Object> json = new HashMap<String, Object>();
    // Cambiar a nativeQuery

    System.out.println("*******************************************");
    System.out.println("*******************************************");
    System.out.println(responsableServicio.getResponsableServicio());
    System.out.println("*******************************************");
    System.out.println("*******************************************");
    String respuesta = formularioRepository.getAnexosRechazados(responsableServicio.getResponsableServicio());
    System.out.printf("RESPUESTA",respuesta);

    return respuesta;
}

那会很好..!!

如果这也行不通,那么, 1)检查你导入的@Query应该来自org.springframework.data.jpa.repository.Query

2) 检查Repository 接口是否有@Repository 注解。

3) 检查@Param 是从org.springframework.data.repository.query.Param 导入的

【讨论】:

    猜你喜欢
    • 2021-11-13
    • 1970-01-01
    • 2020-10-14
    • 2017-04-08
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 2021-01-12
    相关资源
    最近更新 更多