![](/img/trans.png)
[英]JPA / Hibernate : call stored procedure with input and output parameters
[英]How to call a Oracle stored procedure from java hibernate with 6 input parameters and 6 output parametrs?
我正在擴展spring框架的StoredProcedure類,我不知道如何設置輸入參數和輸出參數!
package com.test.schedular.dao;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import oracle.jdbc.driver.OracleTypes;
import org.hibernate.type.StandardBasicTypes;
import org.hibernate.type.Type;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.object.StoredProcedure;
import org.springframework.stereotype.Repository;
import com.mobicule.customer.bean.CustomerTransaction;
@Repository
public class CustomerTransactionSchedularDao extends StoredProcedure implements ICustomerTransactionSchedularDao
{
@Autowired
SessionFactory sessionFactory;
private static final String SPROC_NAME = "procedure_name";
CustomerTransactionSchedularDao(DataSource dataSource)
{
super(dataSource, SPROC_NAME);
declareParameter(new SqlOutParameter("v_dedup_key1", OracleTypes.VARCHAR));
declareParameter(new SqlOutParameter("v_dedup_key2", OracleTypes.VARCHAR));
declareParameter(new SqlOutParameter("v_dedup_key3", OracleTypes.VARCHAR));
declareParameter(new SqlOutParameter("v_dedup_key4", OracleTypes.VARCHAR));
declareParameter(new SqlOutParameter("v_dedup_key6", OracleTypes.VARCHAR));
declareParameter(new SqlOutParameter("v_dedup_key7", OracleTypes.VARCHAR));
declareParameter(new SqlParameter("v_first_name", OracleTypes.VARCHAR));
declareParameter(new SqlParameter("v_last_name", OracleTypes.VARCHAR));
declareParameter(new SqlParameter("v_mother_maiden_name", OracleTypes.VARCHAR));
declareParameter(new SqlParameter("v_dob", OracleTypes.VARCHAR));
declareParameter(new SqlParameter("v_realted_corp_party_id", OracleTypes.VARCHAR));
declareParameter(new SqlParameter("v_req_effective_date", OracleTypes.VARCHAR));
compile();
}
@Override
public void callSyn_P_Get_Dedup_Key(CustomerTransaction customerTransaction)
{
Session session = sessionFactory.openSession();
/*Query query = session.createSQLQuery("CALL syn_p_get_dedup_key(:v_first_name, :v_last_name, :v_mother_maiden_name,"
+ ":v_dob, :v_realted_corp_party_id, :v_req_effective_date )"
+ " :v_dedup_key1,:v_dedup_key2,:v_dedup_key3,:v_dedup_key4,:v_dedup_key6,:v_dedup_key7)")
.addScalar("v_dedup_key1", StandardBasicTypes.STRING )
.addScalar("v_dedup_key2", StandardBasicTypes.STRING )
.addScalar("v_dedup_key3", StandardBasicTypes.STRING )
.addScalar("v_dedup_key4", StandardBasicTypes.STRING )
.addScalar("v_dedup_key6", StandardBasicTypes.STRING )
.addScalar("v_dedup_key7", StandardBasicTypes.STRING )
.setParameter("v_first_name", customerTransaction.getFirstName())
.setParameter("v_last_name", customerTransaction.getLastName())
.setParameter("v_mother_maiden_name",customerTransaction.getMothersMaidenName())
.setParameter("v_dob", customerTransaction.getDateOfBirth())
.setParameter("v_realted_corp_party_id", null)
.setParameter("v_req_effective_date", null);*/
Map<String, Object> inParams = new HashMap<String, Object>(2);
inParams.put("v_first_name", "");
inParams.put("v_last_name", "");
inParams.put("v_mother_maiden_name", "");
inParams.put("v_dob","");
inParams.put("v_realted_corp_party_id", "");
inParams.put("v_req_effective_date", "");
Map<String,Object> m = execute(inParams);
System.out.println(m);
/*List result = query.list();
System.out.println(result);*/
}
}
如何在其語法中具有6個輸入和6個輸出參數的hibernate中調用存儲過程?
首先是StoredProcedure
一個Spring類,而不是一個Hibernate類。
final Map<String, Object> inParams = new HashMap<String, Object>(6);
inParams.put("v_first_name", "");
inParams.put("v_last_name", "");
inParams.put("v_mother_maiden_name", "");
inParams.put("v_dob","");
inParams.put("v_realted_corp_party_id", "");
inParams.put("v_req_effective_date", "");
final Map<String, Object> result = execute(inParams);
System.out.println("v_dedup_key1 = [" + result.get("v_dedup_key1") + ']');
System.out.println("v_dedup_key2 = [" + result.get("v_dedup_key2") + ']');
System.out.println("v_dedup_key3 = [" + result.get("v_dedup_key3") + ']');
System.out.println("v_dedup_key4 = [" + result.get("v_dedup_key4") + ']');
System.out.println("v_dedup_key5 = [" + result.get("v_dedup_key5") + ']');
System.out.println("v_dedup_key6 = [" + result.get("v_dedup_key6") + ']');
您是否嘗試過執行這樣的代碼?
在休眠狀態
String v_param_1 = "param_1";
SessionImpl session = (SessionImpl) sessionFactory.openSession();
CallableStatement callableStatement = session.connection().prepareCall("call P_MYSTORE(?,?)");
callableStatement.setString(1, v_param_1);
callableStatement.registerOutParameter(2, OracleTypes.VARCHAR);
callableStatement.execute();
//get out param from store
String v_param_2 = callableStatement.getString(2);
在oracle中存儲過程
CREATE OR REPLACE PROCEDURE P_MYSTORE(p_in_1 in varchar2, p_out_1 out varchar2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.