1. StoredProcedureQuery란?
JPA가 제공하는 기본 API인 EntityManager의 하위 인터페이스 중 StoredProcedureQuery 라는게 있다.
*EntityManager란? 네이티브쿼리나 프로시저 호출, JPQL을 사용할때 필요한 JPA 기본 제공 API이다.
JPA (표준)
└─ EntityManager
└─ StoredProcedureQuery (인터페이스)
└─ Hibernate가 실제 구현
JPA에서 프로시저를 호출하기 위해 사용한다.
특정 상황에서 프로시저 호출해서 결과만 받아서 사용할 필요가 있는 상황에 자주 사용한다.
단점은
register → set → execute → get
이런식으로 단계를 걸쳐서 프로시저를 호출하기 때문에 코드 가독성이 좀 떨어질 수 있다.
자바가 아니라 DB 로직을 실행하는것이기 때문에 디버깅이 어렵다.(SQL 로그 추적 어려움)
그래서
- ERP 인터페이스
- 외부 시스템 연동
- 레거시 시스템 유지
이러한 특수한 경우에만 실무적으로 사용한다.
<기본문법>
StoredProcedureQuery query =
entityManager.createStoredProcedureQuery("프로시저명");
StoredProcedureQuery 객체를 생성한다
query.registerStoredProcedureParameter("P_PARAM", String.class, ParameterMode.IN);
query.registerStoredProcedureParameter("O_RESULT", Integer.class, ParameterMode.OUT);
query.registerStoredProcedureParameter("O_CURSOR", void.class, ParameterMode.REF_CURSOR);
파라미터를 등록한 뒤
query.setParameter("P_PARAM", "값");
IN 파라미터는 따로 값을 넣는다
query.execute();
그리고 실행
Integer errNum = (Integer) query.getOutputParameterValue("O_ERRNUM");
String errMsg = (String) query.getOutputParameterValue("O_ERRMSG");
List<Object[]> resultList = query.getResultList();
결과조회는 이렇게 한다.
'자바-백엔드' 카테고리의 다른 글
| 동시성 문제로 깨지는 PK 생성 로직 해결 사례 [FOR UPDATE] (0) | 2026.03.30 |
|---|---|
| [스프링] 어떤 상황에서 빈(Bean)을 사용하고 new를 사용해야 할까? (0) | 2026.03.22 |
| [DBeaver] 디비버로 엑셀에 있는 데이터 DB테이블에 넣기 (0) | 2026.02.27 |
| QueryDSL은 왜 쓰는걸까? (0) | 2026.02.06 |
| (HTTP 메서드) GET / POST / PUT / DELETE 는 select / insert / update / delete에 대응되는가? (0) | 2026.02.03 |