对存储过程进行多次删除查询会产生如下所示的错误消息。
CREATE OR REPLACE PROCEDURE delete_dim_page(_page_id bigint)
LANGUAGE plpgsql
AS $procedure$
begin
delete from page_catalog where page_type_id = _page_id;
delete from page_type where page_type_id = _page_id;
END;
$procedure$
;
//实体类
@NamedStoredProcedureQuery(
name = "firstProcedure",
procedureName = "delete_dim_page",
parameters = {
@StoredProcedureParameter(
mode=ParameterMode.IN,
name="_page_id",
type = Long.class
)
}
)
//service.java
StoredProcedureQuery query = em.createNamedStoredProcedureQuery("firstProcedure");
query.setParameter("_page_id", pageTypeId);
query.execute();
收益率
错误:delete_dim_page1(bigint)是一个过程
提示:若要调用过程,请使用CALL。
在Sping Boot 中调用存储过程的推荐方法是什么?
3条答案
按热度按时间6ss1mwsb1#
我想你使用的是spring data jpa。你可以创建一个jpa存储库,然后用这样的声明调用你的过程:
您可以在这里找到其他过程调用方法https://www.baeldung.com/spring-data-jpa-stored-procedures
atmip9wb2#
另一种方法是使用注解@Procedure
lh80um4z3#
当使用 Boot 时,有几种方法可以调用存储过程。Spring提供了一组有用的注解,可用于处理存储过程。
@Procedure
注解有助于Map实体类中定义的存储过程。当使用
@Procedure
注解时,出现以下异常org.springframework.dao.InvalidDataAccessApiUsageException: Type cannot be null; nested exception is java.lang.
我参考了Spring Boot Stored Procedure Example来解决上述异常,并了解如何使用
@Query
的替代解决方案来实现带参数和不带参数的选择、更新和删除存储过程。