CrudRepository-由于参数问题的类型/数量,存储过程调用不起作用

时间:2019-02-05 19:20:01

标签: java hibernate jpa spring-data-jpa spring-data

我的JPA实体为

enter image description here

然后将存储库设为

enter image description here

现在,当我运行它时,出现以下异常:

enter image description here

存储过程为:

enter image description here

它正在针对Oracle数据库运行。有人可以帮我理解,即使我有正确的参数编号和类型,还是为什么会出现此异常。

请注意:我没有本地环境,所以我无法放置示例代码,也不必担心类/方法名,我试图对它们进行伪装,以使它们可能不一致。< / p>

还有一个问题,假设我有2个OUT参数,然后又如何创建实体类,使用一个输出参数,我知道我可以返回String(或适当的返回类型),但是如果有2个OUT参数我不知道该怎么办?我已经读过this文章,但是它只有1个OUT参数,找不到任何说明2个OUT参数的文章或帖子。如果某人的代码中有2个OUT参数,那么会很有帮助。

1 个答案:

答案 0 :(得分:2)

请尝试:

  • 使用过程参数的确切(db)名称:

    @StoredProcedureParameter(name = "tbl_name" ...
    @StoredProcedureParameter(name = "p_date" ...
    @StoredProcedureParameter(name = "p_message" ...
    
  • 或(或者)完全(根据位置)省略名称。

来自StoredProcedureParameter javadoc

  

由数据库中存储过程定义的参数的名称。如果未指定名称,则假定存储过程使用位置参数。


目前您can't have multiple OUT-parameters using spring-data,但是(应该)标准JPA没问题:

StoredProcedureQuery spq = em.createNamedStoredProcedureQuery("my_proc");
proc.setParameter("p_in", 1);
proc.execute();
Integer res1 = (Integer) proc.getOutputParameterValue("out1");
Integer res2 = (Integer) proc.getOutputParameterValue("out2");

另请参阅:Spring Data JPA NamedStoredProcedureQuery Multiple Out Parameters