spring data jpa 调用oracle 存储过程

泄露秘密 提交于 2019-11-27 17:16:45

需求:在某张表插入,修改时,调用一个存储过程同步数据 

在controller层,XXX.saveOrUpdate(entity);方法的后面,

XXX.callXXXX(entity.getId);存储过程接口的定义,

 

存储过程调用的实现:

在service 定义接口 void callXXXX(String id);

在serviceImpl 实现:

导入:

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

注入:

@PersistenceContext
private EntityManager entityManager;

方法实现:

@Transactional
@Override
public void XXXX(String rowId) {
       //调用无返回参数的存储过程
   Query query = entityManager.createNativeQuery("{call XXXX('xxx', '同步业务数据', 'ADA',:rowId)}").setParameter("rowId",rowId);
   query.executeUpdate();
   
}

因为我的项目存在事务的部分bug,导致无法在service中直接调用query.executeUpdate();

理解上面的做法的大佬可以直接省去接口的定义和实现过程,直接注入em进行调用存储过程,

如果你尝试这样做,我碰到有两个问题,一个是说没有加入事务,另一个问题是,无法共用一个事务,如果无法解决这两个问题,按照我上面的做法即可。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!