2013-02-20 52 views
1

我使用oracle存儲過程和spring-data-jpa。在大多數情況下,它很好,當它是一個函數或輸出參數在param列表中第一個時。但是我有輸出中PARAM一些存儲過程是最後在參數列表:帶有兩個輸出參數的Spring-data-jpa NativeQuery

procedure get_data (some_val in varchar2 cur out sys_refcursor); 

或返回多個輸出refcursors像

procedure get_my_data (cur1 out sys_refcursor, cur2 out sys_refcursor, some_val in varchar2); 

是否有可能以任何方式與JpaRepository使用?

回答

1

最後,我通過自己發現答案:)

我的情況好點的使用彈簧數據的Custom Implementation 你應該:

  1. 創建界面,名爲YourRepository * 定製 *使用新的 方法(例如EmployeeRepositoryCustom)
  2. 爲此接口創建一個名稱爲 的實現YourRepository * 默認地將Impl *(例如EmployeeRepositoryImpl)
  3. 裏面方法實現,您可以使用 SimpleJdbcCall時調用Oracle存儲過程,例如
  4. ...
  5. 利潤!

注意:如果你想使用默認CONFIGS

0

好, 如果你想從一個服務或公用事業類StoredProc本地化的電話,然後你可以使用Spring JDBC進行StoredProc命名規則是很重要的。見下文實施

public class StoredProcSampleTest extends StoredProcedure { 
private static final String SPROC_NAME = "HH_EXTRACT.SAMPLE_TEST"; 
public StoredProcSampleTest(DataSource dataSource) { 
    super(dataSource, SPROC_NAME); 
    declareParameter(new SqlParameter("v_in_msg", Types.VARCHAR)); 
    declareParameter(new SqlOutParameter("v_out_msg", Types.VARCHAR)); 
    compile(); 
} 

public String execute() { 
    HashMap<String, Object> hmap = new HashMap<String, Object>(); 
    hmap.put("v_in_msg", "Suresh"); 
    hmap.put("v_out_msg", ""); 
    Map<String, Object> results = execute(hmap); 
    String outRes = (String) results.get("v_out_msg"); 
    return outRes;  
} 

}

現在

在您的公用事業類或服務類,這樣做

protected StoredProcSampleTest storedProcSampleTest; 


@Autowired 
public void setDataSource(final DataSource dataSource) { 
    this.storedProcSampleTest = new StoredProcSampleTest(dataSource); 

} 

public String callStoredProcSampleTest(){ 
    return storedProcSampleTest.execute(); 
}