storedProcedure.registerStoredProcedureParameter 使用 Jpa Eclipse 时没有参数引用游标 Link
storedProcedure.registerStoredProcedureParameter with out Parameter ref cursor with Jpa Eclipse Link
我是 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();
}
但这会导致注册参数出现异常请告诉我们必须传递的内容
我正在使用 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
调用:BEGIN TEST1(P_CODE=>?, P_DATE=>?, P_CURSOR=>?);结尾;绑定 => [3 个参数绑定] 查询:ResultSetMappingQuery()
我认为你的 Store stored Procedure return 列表,所以你对你的代码做了一些修改。
旧代码
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 中。
我是 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();
}
但这会导致注册参数出现异常请告诉我们必须传递的内容 我正在使用 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 调用:BEGIN TEST1(P_CODE=>?, P_DATE=>?, P_CURSOR=>?);结尾;绑定 => [3 个参数绑定] 查询:ResultSetMappingQuery()
我认为你的 Store stored Procedure return 列表,所以你对你的代码做了一些修改。
旧代码
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 中。