调用数据库函数 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 获取连接是解决方案。
我有一个问题。
我想在 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 获取连接是解决方案。