繁体   English   中英

具有两个输出参数的Spring-data-jpa NativeQuery

[英]Spring-data-jpa NativeQuery with two output params

我在spring-data-jpa中使用了oracle存储过程。 在大多数情况下,当它是函数或输出参数在参数列表中排在首位时,它会很好。 但是我有一些存储过程,输出参数是参数列表中的最后一个:

procedure get_data (some_val in varchar2 cur out sys_refcursor); 

或返回多个输出引用,例如

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

是否可以以任何方式在JpaRepository中使用它?

最后,我自己找到了答案:)

我的情况是使用spring-data的Custom Implementation的好时机,您应该:

  1. 使用新方法创建名为YourRepository * Custom *的接口(例如EmployeeRepositoryCustom)
  2. 为此接口创建名称为YourRepository * Impl *的实现(例如EmployeeRepositoryImpl)
  3. 在方法实现内部,您可以使用SimpleJdbcCall来调用Oracle存储过程,例如
  4. ...
  5. 利润!!!

注意:如果要使用默认配置,命名规则很重要

好吧,如果您想从服务或实用程序类对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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM