如何在SpringBoot存储库中设置参数

时间:2018-03-09 16:33:17

标签: spring-boot spring-data-jpa

我有这段代码:

 @Query(nativeQuery = true, value = "select r.id, numero_registro,data_registro as dt_registro ,nr_pasta_pj as pasta, n.nome, value as objetos, (select cast ('{\"nome\" : \"' || ip.nome ||'\", \"documento\": \"' || cpf_cnpj || '\", \"qualidade\": \"'|| q.nome || '\"}' as jsonb) from indicador_pessoal ip  JOIN qualidade q ON ip.qualidade_id = q.id WHERE registro_id = r.id limit 1) as parte  FROM registro r cross join lateral jsonb_array_elements(objetos) JOIN natureza n ON r.natureza_id = n.id where value @> '{id: ?1 , \"atributos\": [{\"nome\": \"?2\", \"valor\" : \"?3\"}]}'")
    List<IndicadorPessoalVO> findByObjeto ( Long id, String nome, String valor);

当我运行此代码时抛出错误:

  

引起:java.lang.IllegalArgumentException:带有该参数的参数   位置[1]不存在

如果删除参数并更改为文本可以正常工作。

@Query(nativeQuery = true, value = "select r.id, numero_registro,data_registro as dt_registro ,nr_pasta_pj as pasta, n.nome, value as objetos, (select cast ('{\"nome\" : \"' || ip.nome ||'\", \"documento\": \"' || cpf_cnpj || '\", \"qualidade\": \"'|| q.nome || '\"}' as jsonb) from indicador_pessoal ip  JOIN qualidade q ON ip.qualidade_id = q.id WHERE registro_id = r.id limit 1) as parte  FROM registro r cross join lateral jsonb_array_elements(objetos) JOIN natureza n ON r.natureza_id = n.id where value @> '{id: 1 , \"atributos\": [{\"nome\": \"nome\", \"valor\" : \"valor\"}]}'")
    List<IndicadorPessoalVO> findByObjeto ( );

1 个答案:

答案 0 :(得分:0)

试试这个

List<IndicadorPessoalVO> findByObjeto (@Param("id") Long id,@Param("nome")String nome, @Param("valor ")String valor);