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) 个答案