Estou fazendo um trabalho em java e gostaria de saber como fazer chamadas de procedures e views que estão presentes no meu banco através do JPA.
Estou fazendo um trabalho em java e gostaria de saber como fazer chamadas de procedures e views que estão presentes no meu banco através do JPA.
utilizando Java e Spring voce pode fazer chamadas utilizando apenas JPA para views, voce precisa definar uma classe model com o(s) atributo(s) da sua view, assim como se voce estivesse chamando uma tabela(entity), define da mesma forma, criando um repository para fazer as chamadas.
Ex.:
@Entity
@Table(name="sua_viwer")
public class EntidadeViwer implemets Serializable{
private static final long serialVersionUID = 1L;
@Id
private Integer id;
private String nome;
//getter and setters e outros metodos
}
@Repository
public interface EntidadeRepository extends JpaRepository<EntidadeViwer, Integer> {
}
Para fazer a chamada de uma procedure utilizando apenas o JPA, pode pode fazer algo como isto:
Suponhamos que possua uma procedure que se chama "NOME_DA_SUA_PROCEDURE" e ela recebe um atributo do tipo string e dado uma string ele retorna um numero.
EntidadeProcedure entidade procedure é um objeto que corresponde a sua procedure.
@Repository
public interface EntidadeRepository extends JpaRepository<EntidadeProcedure, Integer> {
@Procedure
int NOME_DA_SUA_PROCEDURE(String atributoProcesure);
}
voce tbm pode definir da seguinte maneira, definindo uma nomenclatura adequada para ser chamado no java:
@Repository
public interface EntidadeRepository extends JpaRepository<EntidadeProcedure, Integer> {
@Procedure("NOME_DA_SUA_PROCEDURE")
int getResultadoMinhaProcedure(String atributoProcesure);
}
ou
@Repository
public interface EntidadeRepository extends JpaRepository<EntidadeProcedure, Integer> {
@Procedure(procedureName="NOME_DA_SUA_PROCEDURE")
int getResultadoMinhaProcedure(String atributoProcesure);
}
ou
@Repository
public interface EntidadeRepository extends JpaRepository<EntidadeProcedure, Integer> {
@Procedure(value="NOME_DA_SUA_PROCEDURE")
int getResultadoMinhaProcedure(String atributoProcesure);
}
Agora para fazer a mesma chamada em uma viwer utilzando JPQL seria dessa forma:
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
public class Test {
public static void main( String[ ] args ) {
EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
EntityManager entitymanager = emfactory.createEntityManager();
//Funcao de consultar em uma viwer um atributo
Query query = entitymanager.
createQuery("Select v.nome from sua_viwer v");
List<String> list = query.getResultList();
for(String n:list) {
System.out.println("Viwer nome :"+n);
}
//Funcao de consultar em uma viwer um objeto
Query query = entitymanager.createQuery( "Select v from sua_viwer v" );
List<EntidadeViwer> list=(List<EntidadeViwer>)query.getResultList( );
String valorConsulta="teste";
// funcao que consulta a sua procedure
createQuery("EXEC NOME_DA_SUA_PROCEDURE @param_procedure='"+valorConsulta+"'");
Integer valor = query.getResultList();
}
}
referencias : https://www.objectdb.com/java/jpa/query/jpql/select https://www.tutorialspoint.com/jpa/jpa_jpql.htm https://www.baeldung.com/spring-data-jpa-stored-procedures https://www.w3schools.com/sql/sql_stored_procedures.asp https://www.devmedia.com.br/postgresql-stored-procedures-funcoes-em-linguagem-sql/5118 https://www.devmedia.com.br/trabalhando-com-stored-procedures-no-postgresql/33354
Espero ter ajudado, bons estudos.