Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java storedProcedure.registerStoredProcedureParameter,不带参数ref cursor和Jpa Eclipse链接_Java_Hibernate_Jpa_Orm_Eclipselink - Fatal编程技术网

Java storedProcedure.registerStoredProcedureParameter,不带参数ref cursor和Jpa Eclipse链接

Java storedProcedure.registerStoredProcedureParameter,不带参数ref cursor和Jpa Eclipse链接,java,hibernate,jpa,orm,eclipselink,Java,Hibernate,Jpa,Orm,Eclipselink,我是Jpa新手,我想执行这个过程 我有如下代码 private static final String PERSISTENCE_UNIT_NAME = "todos"; private static EntityManagerFactory factory; public static void main(String[] args) { factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);

我是Jpa新手,我想执行这个过程

我有如下代码

private static final String PERSISTENCE_UNIT_NAME = "todos";
private static EntityManagerFactory factory;

public static void main(String[] args) {

    factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
    EntityManager em = factory.createEntityManager();

    em.getTransaction().begin();
    StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery("TEST1");
    // set parameters
    storedProcedure.registerStoredProcedureParameter("P_CODE", String.class, ParameterMode.IN);
    storedProcedure.registerStoredProcedureParameter("P_DATE", String.class, ParameterMode.IN);
    storedProcedure.registerStoredProcedureParameter("P_CURSOR", ResultSet.class, ParameterMode.REF_CURSOR );
    storedProcedure.setParameter("P_CODE", "5110" );
    storedProcedure.setParameter("P_DATE", "01/01/2015" );
    // execute SP
    storedProcedure.execute();
    // get result
    Object obj =storedProcedure.getOutputParameterValue("tax");

    em.getTransaction().commit();
    em.close();
}

但这是对register out参数的一个例外,请告诉我们必须传递什么 我正在使用Jpa EclipseLink实现 线程“main”javax.persistence.PersistenceException中的异常:异常[EclipseLink-4002](Eclipse持久性服务-2.6.4.v20160829-44060b6):org.Eclipse.persistence.exceptions.DatabaseException 内部异常:java.sql.SQLException:ORA-06550:第1行第7列: PLS-00306:调用“TEST1”时参数的数量或类型错误 ORA-06550:第1行第7列:PL/SQL:语句被忽略错误代码:6550
调用:开始测试1(P_代码=>?,P_日期=>?,P_光标=>?);结束;bind=>[3个参数绑定]Query:ResultSetMappingQuery()

我认为您的存储过程返回列表,所以您需要对代码进行一些更改

旧代码

 storedProcedure.registerStoredProcedureParameter("P_CURSOR", ResultSet.class, ParameterMode.REF_CURSOR );

Object obj =storedProcedure.getOutputParameterValue("tax");
新代码

    storedProcedure.registerStoredProcedureParameter("P_CURSOR",void.class,ParameterMode.REF_CURSOR);

Object obj =storedProcedure.getResultList();

您的所有数据都存储在obj中

为什么不发布存储过程,并发布确切的异常+堆栈跟踪?您的存储过程返回列表,相应地,您可以更改它,我发布了答案,也可以工作谢谢您naresh