2014-10-29 121 views
0

以下是过程。使用jpa 2.0调用具有输出参数的存储过程

create or replace 
    PROCEDURE test (upload_id_in in NUMBER, o in out NUMBER) 
    is 

    begin 

    select safety_id into o from case_smsw_master where safety_id=111722; 

    end; 

以下是调用过程的代码。

  Query q = em.createNativeQuery("CALL test(?)"); 
      q.setParameter(1, Long.valueOf(tempCaseId)); 
      q.setHint("org.hibernate.callable", true); 
      Object i=q.executeUpdate();//getResultList();//executeUpdate(); 

例外是result set meatadata not found。 可能是什么原因。

回答

0

请尝试下面的代码。

/**************************************************/ 
/* Call MYSQL Stored Procedure and MAP it to bean */ 
/**************************************************/ 
Query callStoredProcedure_MYSQL = session.createSQLQuery("CALL SP_MYSQL_HIBERNATE (:param1, :param2, :param3)").addEntity(User.class); 
callStoredProcedure_MYSQL.setInteger("param1", 10); 
callStoredProcedure_MYSQL.setInteger("param2", 10); 
callStoredProcedure_MYSQL.setString("param3", "javaQuery"); 

/* callStoredProcedure_MSSQL.list() will execute stored procedure and return the value */ 
List userList = callStoredProcedure_MYSQL.list(); 
if (userList != null && !userList.isEmpty()) { 
for(User user : userList){ 
    System.out.println("Firstname:"+user.getFirstname()); 
} 
} 

/******************************************************************/ 
/* Process custom result of Stored Procedure      */ 
/* Un-comment the code, This will be the same for MSSQL and MYSQL */ 
/******************************************************************/ 
Query callStoredProcedure_MYSQL = session.createSQLQuery("CALL SP_MYSQL_HIBERNATE (:param1, :param2, :param3)"); 
callStoredProcedure_MYSQL.setInteger("param1", 10); 
callStoredProcedure_MYSQL.setInteger("param2", 10); 
callStoredProcedure_MYSQL.setString("param3", "javaQuery"); 

/* callStoredProcedure_MYSQL.list() will execute stored procedure and return the value */ 
List customResult = callStoredProcedure_MYSQL.list(); 
if (customResult != null && !customResult.isEmpty()) { 
Object[] obj = customResult.get(0); 
System.out.println(obj[0]); 
System.out.println(obj[1]);    
} 
+0

其实我的问题是我必须使用实体管理器......我不允许使用会话对象。 – user3093845 2014-11-10 20:00:05

相关问题