需求:在某张表插入,修改时,调用一个存储过程同步数据
在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进行调用存储过程,
如果你尝试这样做,我碰到有两个问题,一个是说没有加入事务,另一个问题是,无法共用一个事务,如果无法解决这两个问题,按照我上面的做法即可。
来源:oschina
链接:https://my.oschina.net/u/2285090/blog/2050337