Spring Boot中如何调用存储过程?

Spa*_*ana 2 spring stored-procedures hibernate spring-data-jpa spring-boot

对多个删除的存储过程的查询会产生如下所示的错误消息。

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$
;
Run Code Online (Sandbox Code Playgroud)

//实体类

@NamedStoredProcedureQuery(
    name = "firstProcedure",
    procedureName = "delete_dim_page",
    parameters = {
        @StoredProcedureParameter(
            mode=ParameterMode.IN,
            name="_page_id",
            type = Long.class
        )
    }
)
Run Code Online (Sandbox Code Playgroud)

//服务.java

    StoredProcedureQuery query = em.createNamedStoredProcedureQuery("firstProcedure");
    query.setParameter("_page_id", pageTypeId);
    query.execute();
Run Code Online (Sandbox Code Playgroud)

产量

错误:delete_dim_page1(bigint) 是一个过程
提示:要调用过程,请使用 CALL。

在 Spring Boot 中调用存储过程的推荐方法是什么?

sou*_*ung 7

我想你正在使用 Spring Data JPA。您只需创建一个 JPA 存储库并使用如下注释调用您的过程:

public interface PageCatalogRepository extends JpaRepository<PageCatalogEntity , Void> {
    @Query(value = "CALL firstProcedure(:page_id);", nativeQuery = true)
    void deletePageCatalogById(@Param("page_id") Long page_id);
}
Run Code Online (Sandbox Code Playgroud)

您可以在这里找到其他过程调用方法https://www.baeldung.com/spring-data-jpa-stored-procedures

  • 如果我也有“out”参数,@query 是什么 (2认同)