Spring如何在Boot中调用存储过程?
How to call a stored procedure in 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$
;
//实体类
@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();
产量
ERROR: delete_dim_page1(bigint) is a procedure
Hint: To call a procedure, use CALL.
在 Spring Boot 中调用存储过程的推荐方法是什么?
我想你正在使用 spring 数据 jpa。
您可以只创建一个 jpa 存储库,然后使用这样的注释调用您的过程:
public interface PageCatalogRepository extends JpaRepository<PageCatalogEntity , Long> {
@Query(value = "CALL firstProcedure(:page_id);", nativeQuery = true)
void deletePageCatalogById(@Param("page_id") Long page_id);
}
您可以在这里找到其他过程调用方法https://www.baeldung.com/spring-data-jpa-stored-procedures
另一种方法是使用注解@Procedure
import org.springframework.data.jpa.repository.query.Procedure;
...
public interface PageCatalogRepository extends JpaRepository<PageCatalogEntity , Long> {
@Procedure
public String firstProcedure(Long page_id);
}
查询多个删除的存储过程会产生如下所示的错误消息。
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();
产量
ERROR: delete_dim_page1(bigint) is a procedure
Hint: To call a procedure, use CALL.
在 Spring Boot 中调用存储过程的推荐方法是什么?
我想你正在使用 spring 数据 jpa。 您可以只创建一个 jpa 存储库,然后使用这样的注释调用您的过程:
public interface PageCatalogRepository extends JpaRepository<PageCatalogEntity , Long> {
@Query(value = "CALL firstProcedure(:page_id);", nativeQuery = true)
void deletePageCatalogById(@Param("page_id") Long page_id);
}
您可以在这里找到其他过程调用方法https://www.baeldung.com/spring-data-jpa-stored-procedures
另一种方法是使用注解@Procedure
import org.springframework.data.jpa.repository.query.Procedure;
...
public interface PageCatalogRepository extends JpaRepository<PageCatalogEntity , Long> {
@Procedure
public String firstProcedure(Long page_id);
}