@Call 어노테이션에 지정하는 sql String에는 Data 인터페이스의 call() 메소드에 첫 번째 매개변수로 전달되는 sql String에서 사용되는 것과 동일한 양식 및 동일한 매개변수 표시문자 참조 기능이 있습니다.
어노테이션이 있는 메소드는 Data 인터페이스의 call() 메소드를 사용한 스토어드 프로시저의 해당 호출에서 전달되는 것과 동일한 매개변수를 매개변수로 사용합니다.
SQL CALL문의 일괄처리를 실행하려는 경우, 스토어드 프로시저에 OUT 또는 INOUT 매개변수가 없고 해당 프로시저가 쿼리 결과를 리턴하지 않는 경우에만 이를 수행할 수 있습니다.
@Call 어노테이션이 있는 메소드는 CallHandler의 사용을 지원하지 않습니다.
@Call 어노테이션이 있는 메소드는 SQL CALL문의 일괄처리를 지원하지 않습니다. 그러나 SQL CALL문을 사용하여 일괄처리 조작을 수행해야 하는 경우에는 인라인 메소드가 Data.updateMany() 메소드의 사용을 요구하는 방식과 유사하게 어노테이션이 있는 메소드 지원은 @Update 어노테이션에 종속되며 일반 오브젝트의 콜렉션을 승인하고 int 배열을 리턴하는 경우와 동일한 규칙을 사용합니다.
어노테이션이 있는 메소드와 public StoredProcedureResult call (String sql, Object... parameters); 서명이 있는 Data.call() 메소드 사이에는 한 가지 중요한 다른 차이점이 있습니다. @Call 어노테이션이 있는 메소드는 StoredProcedureResult 오브젝트를 리턴하도록 정의될 필요가 없습니다. 이 메소드는 또한 void를 리턴하거나 다음 유형 중 하나를 리턴하도록 정의될 수 있습니다.
void에 대한 지원은 호출된 스토어드 프로시저가 ResultSet 오브젝트를 리턴하지 않거나 리턴되는 ResultSet 오브젝트에 관심이 없음을 인터페이스 설계자가 아는 경우에 제공됩니다. 예를 들어, 다음과 같습니다.
@Call(sql= "CALL updateEmployee(:empno, :name, :sal, :bonus)") public void updateMyEmployee(EmployeeBean empObject);
스토어드 프로시저 updateEmployee가 ResultSet를 리턴하지 않을 수 있으며, updateEmployee의 리턴 유형이 void이므로 이는 중요하지 않습니다. 스토어드 프로시저가 OUT 또는 INOUT 매개변수를 리턴하는 경우, 해당 매개변수는 empObject87 매개변수에 위치됩니다(Data.call() 메소드에 설명된 것과 동일한 규칙 사용).
모든 기타 리턴 유형(List<Map<String,Object>> 등)에 대한 지원은 호출된 스토어드 프로시저가 단일 ResultSet을 리턴하거나 첫 번째 ResultSet 이후에 리턴되는 모든 ResultSet 오브젝트에 관심이 없음을 인터페이스 설계자가 아는 경우에 제공됩니다. 예를 들어, 다음과 같습니다.
@Call(sql="CALL GetEmployeesInDept(:deptno)") public List<EmployeeBean> queryDeptEmployee( DepartmentBean deptBean);
스토어드 프로시저 GetEmployeesInDept는 deptBean의 deptno IN 매개변수와 함께 호출됩니다. GetEmployeesInDept가 IN 대신에 INOUT 매개변수를 갖도록 정의되는 경우, 다시 해당 매개변수의 OUT 값이 deptBean의 deptno 특성을 갱신하는 데 사용됩니다(Data.call() 메소드에 설명된 것과 동일한 규칙 사용).
스토어드 프로시저 GetEmployeesInDept의 매개변수와 무관하게 첫 번째로 리턴된 ResultSet을 List로 리턴되는 EmployeeBean 오브젝트로 처리하도록 코드가 생성됩니다. 추가 ResultSet 오브젝트는 존재하는 경우 무시됩니다. ResultSet이 전혀 없거나 첫 번째 ResultSet이 EmployeeBean에 맵핑되지 않는 경우, 예외가 발생됩니다.