【问题标题】:Calling database function JPA repository调用数据库函数 JPA 存储库
【发布时间】:2021-10-05 20:10:20
【问题描述】:

我有一个问题。

我想在 spring boot 中从我的 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;

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

然后从 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 中选择 pkgname.sf_getval() var;没有用,因为这违反了数据库中的隔离,这不是我的选择。必须是调用命令。

我直接使用 de 存储库,因为在我的项目中我已经配置了 spring.cloud.config 并且我不需要 entityManager 或类似的东西。不是解决办法做一个jdbc调用。

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

【问题讨论】:

    标签: spring spring-boot spring-data-jpa function-definition


    【解决方案1】:

    终于找到答案了:

    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();
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 2019-12-22
      • 2019-05-18
      • 2015-03-28
      • 1970-01-01
      相关资源
      最近更新 更多