JVM/JPA

스토어드 프로시저(JPA 2.1)

kyoulho 2023. 6. 30. 15:44

프로시저

DELIMITER //
CREATE PROCEDURE proc_multiply (INOUT inParam INT, INOUT outParam INT)
BEGIN
	SET outParam = inParam * 2;
END //

 

순서 기반 파라미터 호출

 StoredProcedureQuery spq = em.createStoredProcedureQuery("proc_multiply");
 spq.registerStoredProcedureParameter(1, Integer.class, ParameterMode.IN);
 spq.registerStoredProcedureParameter(2, Integer.class, ParameterMode.OUT);

 spq.setParameter(1, 100);
 spq.execute();
 Integer outputParameterValue = (Integer) spq.getOutputParameterValue(2);
 System.out.println(outputParameterValue); // 결과: 200

 

이름 기반 파라미터 사용

 StoredProcedureQuery spq = em.createStoredProcedureQuery("proc_multiply");
 spq.registerStoredProcedureParameter("inParam", Integer.class, ParameterMode.IN);
 spq.registerStoredProcedureParameter("outParam", Integer.class, ParameterMode.OUT);

 spq.setParameter("inParam", 100);
 spq.execute();
 Integer outputParameterValue = (Integer) spq.getOutputParameterValue("outParam");
 System.out.println(outputParameterValue); // 결과: 200

 

Named 스토어드 프로시저 사용

@NamedStoredProcedureQuery(
        name = "multiply",
        procedureName = "proc_multiply",
        parameters = {
                @StoredProcedureParameter(name = "inParam", mode = ParameterMode.IN, type = Integer.class),
                @StoredProcedureParameter(name = "outParam", mode = ParameterMode.OUT, type = Integer.class)
        })
@Entity
public class Member {...}

//사용
 StoredProcedureQuery spq = em.createStoredProcedureQuery("multiply");
 spq.setParameter("inParam", 100);
 spq.execute();
 Integer outputParameterValue = (Integer) spq.getOutputParameterValue("outParam");
 System.out.println(outputParameterValue); // 결과: 200

 

728x90

'JVM > JPA' 카테고리의 다른 글

스프링 데이터 JPA  (0) 2023.07.02
객체지향 쿼리 심화  (0) 2023.06.30
네이티브 SQL  (0) 2023.06.30
QueryDSL  (0) 2023.06.28
JPQL 다형성 쿼리, 사용자 정의 함수, Named 쿼리  (0) 2023.06.28