有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将类型集合参数传递给JPA中的存储过程?

我在数据库中定义了下一个集合类型:

CREATE OR REPLACE TYPE "TORDEN_CAMPO" AS VARRAY (5) OF VARCHAR2 (9)

现在,我需要调用这个存储过程,它有两个TORDEN_CAMPO类型的参数:

    PROCEDURE BUSQUEDA(pivTABLA                  IN VARCHAR2,
                   ...(Parameters)
                   pivPERIODO_EVENTO_FINAL   IN NUMBER,
                   pivCUENTA                 IN VARCHAR2,
                   pivENTIDAD                IN VARCHAR2,
                   pivMACRO                  IN VARCHAR2,
                   pivDEPENDENCIA            IN VARCHAR2,
                   pivIdPARTIC               IN VARCHAR2,
                   ...(More parameters...)
                   pivORDEN_CAMPO            IN tORDEN_CAMPO,
                   pivORDEN_TIPO             IN tORDEN_CAMPO,
                   ...(Moooore parameters...)
                   xmlFinal                  OUT XMLTYPE);

在Java JPA中,我有以下代码来映射过程:

@NamedStoredProcedureQuery(
    name = "BUSQUEDA",
    procedureName = "PKG_CONSULTA_TRAZABILIDAD.BUSQUEDA",
    parameters = {
       ...(Parameters)
        @StoredProcedureParameter(name="pivPERIODO_EVENTO_INICIAL", mode = ParameterMode.IN, type = Integer.class),
        @StoredProcedureParameter(name="pivPERIODO_EVENTO_FINAL", mode = ParameterMode.IN, type = Integer.class),
        @StoredProcedureParameter(name="pivCUENTA", mode = ParameterMode.IN, type = String.class),
        @StoredProcedureParameter(name="pivENTIDAD", mode = ParameterMode.IN, type = String.class),
        @StoredProcedureParameter(name="pivMACRO", mode = ParameterMode.IN, type = String.class),
        @StoredProcedureParameter(name="pivDEPENDENCIA", mode = ParameterMode.IN, type = String.class),
        @StoredProcedureParameter(name="pivIdPARTIC", mode = ParameterMode.IN, type = String.class),
        ...(More parameters...)
        @StoredProcedureParameter(name="pivORDEN_CAMPO", mode = ParameterMode.IN, type = String[].class),
        @StoredProcedureParameter(name="pivORDEN_TIPO", mode = ParameterMode.IN, type = String[].class),
        ...(Moooooooore parameters...)
        @StoredProcedureParameter(name="xmlFinal", mode = ParameterMode.OUT, type = String.class)
    })

当我打电话时,我遇到了下一个错误:

Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException

Internal Exception: java.sql.SQLException: Invalid column type Error Code: 17004 Call: BEGIN PKG_CONSULTA_TRAZABILIDAD.BUSQUEDA(pivTABLA=>?, pivIFGD=>?, pivPERIODO_INICIAL=>?, pivPERIODO_FINAL=>?, pivPERIODO_EVENTO_INICIAL=>?, pivPERIODO_EVENTO_FINAL=>?, pivCUENTA=>?, pivENTIDAD=>?, pivMACRO=>?, pivDEPENDENCIA=>?, pivIdPARTIC=>?, pivNifCliente=>?, pivNombCliente=>?, pivNifGrupo=>?, pivNombGrupo=>?, pivCODA=>?, pivDiferida=>?, pivTI=>?, pivFiltroAnulaciON=>?, pivORDEN_CAMPO=>?, pivORDEN_TIPO=>?, pinREG_INICIAL=>?, pinREG_FINAL=>?, xmlFinal=>?); END; bind => [24 parameters bound] Query: ResultSetMappingQuery() at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:340) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:682) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:558) at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:2002) at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:570) at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:242) at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:228) at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.execute(DatasourceCallQueryMechanism.java:220) at org.eclipse.persistence.queries.ResultSetMappingQuery.executeDatabaseQuery(ResultSetMappingQuery.java:312) at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:899) at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:798) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2896) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1804) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1786) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1751) at org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:258) ... 30 more Caused by: java.sql.SQLException: Invalid column type at oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical(OraclePreparedStatement.java:10495) at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:9974) at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:10799) at oracle.jdbc.driver.OracleCallableStatement.setObject(OracleCallableStatement.java:6097) at oracle.jdbc.driver.OraclePreparedStatementWrapper.setObject(OraclePreparedStatementWrapper.java:241) at org.eclipse.persistence.internal.databaseaccess.DatabasePlatform.setParameterValueInDatabaseCall(DatabasePlatform.java:2441) at org.eclipse.persistence.platform.database.oracle.Oracle9Platform.setParameterValueInDatabaseCall(Oracle9Platform.java:525) at org.eclipse.persistence.internal.databaseaccess.DatabaseCall.prepareStatement(DatabaseCall.java:797) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:619) ... 44 more

我认为这个错误是由我想要传递的数组引起的,其余的参数都是字符串或数字。。。那我怎么能通过JPA通过这个VARRAY


共 (0) 个答案