调用数据库函数 JPA 存储库

Calling database function JPA repository

我有一个问题。

我想在 spring 启动时从我的 JPARepository 调用数据库函数...我的函数是下一个:

CREATE function sf_getval(seqname varchar2) return NUMBER IS ret_val number :=0; 
begin
 INSERT INTO schema.table(IDENT ,NAME) VALUES (12321,'Name');
  return ret_val;
  END sf_getval;

那没有做任何事情,我只想要一个在数据库中插入一些东西的函数和 return 一个数字,我需要这个,不能改变,是定义。

然后从 JPA 我需要这样消费:

@Repository
public interface myRepository extends JpaRepository<Some, SomeId> {

@Query(nativeQuery = true, value = "CALL \"pkgName\".\"sf_getval\"(:name) ")
int sf_getval(@Param("name") String name);

如果我从 dual 中执行 select pkgname.sf_getval() var;没有用,因为这违反了数据库中的隔离,对我来说不是一个选择。必须是调用命令。

我直接使用 de repository 因为在我的项目中我已经配置 spring.cloud.config 并且我不需要 entityManager 或类似的东西。调用 jdbc 不是解决方案。

谢谢,对不起我的英语。 问候

终于找到答案了:

String call = "{ ? = call FCRLIVE.AP_CH_GET_ACCT_BALANCES(?, ?, ?, ?, ?) }";
CallableStatement cstmt = conn.prepareCall(call);
cstmt.setQueryTimeout(1800);
cstmt.setString(1, inputCode);
cstmt.registerOutParameter(2, Types.NUMBER);
cstmt.executeUpdate();

不是确切的代码,但是在纯 JPA 中从 entityManager 获取连接是解决方案。