我是Hibernate的新手,之前我只是使用Sql和Resultset以及用于Procedures可调用语句。
现在,我的任务是调用一个过程,该过程包含多种输入和输出类型USER DEFINED DB Objects。
我调用了一个输入类型为String或int且输出类型为String或int的过程。我现在很困惑。
如何获取输出?
以下步骤:
PROCEDURE Proc_Consultatrabajadores(Ip_Arrayparametros IN Sim_Typ_Array_Lista
,Ip_Trabajadoresdetalles IN ARL_TYP_ARRAY_TRABBASICDETL_CT
,Ip_Centrotrabcodigo IN ARL_TYP_ARRAY_CNTROTRABCOD_CT
,Op_Arraydatostrabajadores OUT ARL_TYP_ARRAY_CONSTRBJADORS_CT
,Op_Numeropoliza OUT NUMBER
,Op_FechaPoliza OUT VARCHAR2
,Ip_Validacion IN VARCHAR2
,Ip_Proceso IN Sim_Typ_Proceso
,Op_Resultado OUT NUMBER
,Op_Arrerrores OUT Sim_Typ_Array_Error );
现在的Java代码:-
ConsultaTrabajadoresRespType consultaTrabajadoresRespType = new ConsultaTrabajadoresRespType();
DatosBasicosTrabajadores datosBasicosTrabajadores = new DatosBasicosTrabajadores();
List<DatosBasicoTrabajador> basicosTrabajadorsList = new ArrayList<DatosBasicoTrabajador>();
DatosBasicoTrabajador datosBasicoTrabajador = new DatosBasicoTrabajador();
datosBasicoTrabajador.setTipoDocumento(consultaTrabajadoresReqType
.getData().getTrabajadorTipoDocumento());
datosBasicoTrabajador
.setNumeroDocumento(consultaTrabajadoresReqType.getData()
.getTrabajadorNumeroDocumento());
basicosTrabajadorsList.add(datosBasicoTrabajador);
datosBasicosTrabajadores
.setDatosBasicosTrabajador(basicosTrabajadorsList);
List<DominioVO> listaParametrosIn = consultasTrabajadoresDominioVOObject(consultaTrabajadoresReqType);
List<ObjetoOracleDto> lstObjOracleEntrada = new ArrayList<ObjetoOracleDto>(
4);
List<ObjetoOracleDto> lstObjOracleSalida = new ArrayList<ObjetoOracleDto>(
4);
Session session = com.segurosbolivar.arl.hibernate.util.HibernateUtil
.currentSession();
session.doWork(new Work() {
@Override
public void execute(Connection connection) throws SQLException {
if (connection.isWrapperFor(OracleConnection.class)) {
connection = connection.unwrap(OracleConnection.class);
}
StructDescriptor recDescriptor = StructDescriptor
.createDescriptor(
ConstantesOracle.SIM_TYPE_SINIESTRO_CESVI,
connection);
STRUCT oracleRec = new STRUCT(recDescriptor, connection,
valors);
CallableStatement callableStatement = connection
.prepareCall("{ CALL"
.concat(ConstantesOracle.ARL_PCK_CONSULTA_TRAB)
.concat(ConstantesOracle.PROC_CONSULTATRABAJADORES_REST)
.concat("(?,?,?,?,?,?,?,?,?,?) }"));
callableStatement.setObject(1, oracleRec);
callableStatement.setObject(2, oracleRec);
callableStatement.setObject(3, oracleRec);
callableStatement
.registerOutParameter(4, OracleTypes.CURSOR);
callableStatement.registerOutParameter(5,
OracleTypes.NUMBER);
callableStatement.registerOutParameter(6,
OracleTypes.VARCHAR);
callableStatement.registerOutParameter(7,
OracleTypes.VARCHAR);
callableStatement.registerOutParameter(8,
OracleTypes.STRUCT);
callableStatement.registerOutParameter(9,
OracleTypes.NUMBER);
callableStatement.registerOutParameter(10,
OracleTypes.CURSOR);
callableStatement.execute();
callableStatement.close();
connection.close();
}
});
如何使用那里的类映射对象。