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