Jotahemmy Silva Postado Maio 2, 2022 Compartilhar Postado Maio 2, 2022 MODEL ----------------------------------------- package com.procedures.pjProcedure.model; import lombok.Getter; import lombok.Setter; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Getter @Setter @Entity @Table(name="tb_especialidades") public class Especialidade { @Id @Column(name="esp_codigo") private Long codigo; @Column(name="esp_descricao") private String descricao; @Column(name="esp_nome_reduzido") private String nomeReduzido; } REPOSITORY--------------------------------------------- package com.procedures.pjProcedure.repository; import com.procedures.pjProcedure.model.Especialidade; import org.springframework.data.jpa.repository.JpaRepository; public interface EspecialidadeRepository extends JpaRepository<Especialidade, Long> { } SERVICE-------------------------------------- package com.procedures.pjProcedure.service; import com.procedures.pjProcedure.repository.EspecialidadeRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.object.StoredProcedure; import org.springframework.stereotype.Service; import javax.persistence.Entity; import javax.persistence.EntityManager; import javax.persistence.StoredProcedureQuery; @Service public class EspecialidadeService { @Autowired private EspecialidadeRepository er; public void executaProcedure(EntityManager em){ StoredProcedureQuery spq = em.createStoredProcedureQuery("spesp01"); spq.execute(); } } RESOURCE--------------------------------------------- package com.procedures.pjProcedure.resource; import com.procedures.pjProcedure.model.Especialidade; import com.procedures.pjProcedure.repository.EspecialidadeRepository; import com.procedures.pjProcedure.service.EspecialidadeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import java.util.List; @RestController @RequestMapping("/especialidades") public class EspecialidadeResource { @Autowired private EspecialidadeRepository er; @Autowired private EspecialidadeService es; @GetMapping("/listar") public List<Especialidade> Listar(){ return er.findAll(); } @PostMapping("/exeProcedure") public void exeProcedure(){ EntityManagerFactory emf = Persistence .createEntityManagerFactory("spesp01"); EntityManager em = emf.createEntityManager(); es.executaProcedure(em); } } MINHA TABELA NO POSTGRESQL--------------------------- create sequence esp_id_seq START WITH 1; create table tb_especialidades ( esp_codigo bigint not null default nextval('esp_id_seq'), esp_descricao varchar(100), esp_nome_reduzido varchar(15), primary key (esp_codigo) ); MINHA STORED PROCEDURE SPESP01()---------------------- CREATE OR REPLACE PROCEDURE public.spesp01() LANGUAGE 'plpgsql' AS $BODY$ BEGIN update tb_especialidades set ESP_NOME_REDUZIDO='tst03' WHERE ESP_CODIGO=3; COMMIT; END; $BODY$; -------------------------------------------------------- DEPURACAO.txt Link to comment Compartilhe em outros sites Outras opções de compartilhamento...
alex_formagio Postado Maio 3, 2022 Compartilhar Postado Maio 3, 2022 Bom dia Jotahemmy Silva, tudo bem? Não sou nenhum especialista em Spring mas acho que posso te ajudar. Tenta da seguinte forma: Vamos começar pelo repositório: public interface EspecialidadeRepository extends JpaRepository<Especialidade, Long> { @Procedure("public.spesp01()") void spesp01(); } No seu Service: @Service public class EspecialidadeService { @Autowired private EspecialidadeRepository er; public void executaProcedure(EntityManager em){ er.spesp01(); } No seu Controller: @PostMapping("/exeProcedure") public void exeProcedure(){ es.executaProcedure(); } Se você está usando Spring boot com JPA você não precisa criar um EntityManager pois ele já é fornecido pelo Spring Data JPA. Espero ter ajudado! Link to comment Compartilhe em outros sites Outras opções de compartilhamento...
Jotahemmy Silva Postado Maio 9, 2022 Autor(a) Compartilhar Postado Maio 9, 2022 Olá nosso amigo, foram feitas as alterações, porém continua com erro: ERROR: public.spesp01() is a procedure Dica: To call a procedure, use CALL. NO Repository ---------------- @Procedure("public.spesp01") void spesp01(); No Service ---------------- public void executaProcedure(){ especialidadeRepository.spesp01(); } No Controller ---------------- @PostMapping("/exeProcedure") public void exeProcedure(){ especialidadeService.executaProcedure(); } erro ---------------- ... 2022-05-09 02:25:42.396 INFO 10492 --- [ restartedMain] c.c.s.SyscoopmedrnapiApplication : Started SyscoopmedrnapiApplication in 5.252 seconds (JVM running for 5.67) 2022-05-09 02:25:47.966 INFO 10492 --- [nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2022-05-09 02:25:47.966 INFO 10492 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2022-05-09 02:25:47.967 INFO 10492 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 0 ms Hibernate: {call public.spesp01()} 2022-05-09 02:25:48.043 WARN 10492 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 42809 2022-05-09 02:25:48.046 ERROR 10492 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: public.spesp01() is a procedure Dica: To call a procedure, use CALL. Posição: 15 2022-05-09 02:25:48.062 ERROR 10492 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: Error calling CallableStatement.getMoreResults; SQL [public.spesp01]; nested exception is org.hibernate.exception.SQLGrammarException: Error calling CallableStatement.getMoreResults] with root cause org.postgresql.util.PSQLException: ERROR: public.spesp01() is a procedure Dica: To call a procedure, use CALL. Posição: 15 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2552) ~[postgresql-42.2.23.jar:42.2.23] at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2284) ~[postgresql-42.2.23.jar:42.2.23] at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:322) ~[postgresql-42.2.23.jar:42.2.23] at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:481) ~[postgresql-42.2.23.jar:42.2.23] at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:401) ~[postgresql-42.2.23.jar:42.2.23] at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:164) ~[postgresql-42.2.23.jar:42.2.23] at org.postgresql.jdbc.PgCallableStatement.executeWithFlags(PgCallableStatement.java:83) ~[postgresql-42.2.23.jar:42.2.23] at org.postgresql.jdbc.PgPreparedStatement.execute(PgPreparedStatement.java:153) ~[postgresql-42.2.23.jar:42.2.23] at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.HikariProxyCallableStatement.execute(HikariProxyCallableStatement.java) ~[HikariCP-4.0.3.jar:na] at org.hibernate.result.internal.OutputsImpl.<init>(OutputsImpl.java:56) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at org.hibernat ... Link to comment Compartilhe em outros sites Outras opções de compartilhamento...
alex_formagio Postado Maio 9, 2022 Compartilhar Postado Maio 9, 2022 Bom dia, tudo bem? de uma verificada neste post: https://stackoverflow.com/questions/68029920/how-to-call-a-stored-procedurepostgresql-with-spring-jpa Link to comment Compartilhe em outros sites Outras opções de compartilhamento...
Postagens Recomendadas
Crie uma conta ou entre para comentar 😀
Você precisa ser um membro para deixar um comentário.
Crie a sua conta
Participe da nossa comunidade, crie sua conta.
Criar minha conta agoraÉ bem rápido!
Entrar
Você já tem uma conta?
Entrar agoraFaça o login agora.