我需要使用Hibernate调用过程,并且过程包含用户定义的对象

时间:2019-01-31 14:19:31

标签: java hibernate stored-procedures procedure

我是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();
            }
        });

如何使用那里的类映射对象。

0 个答案:

没有答案