Could not obtain transaction-synchronized Session for current thread
一 场景
我的项目中,发生这个错误是由于我使用springmvc框架,
但是在里面新建了一个 springboot的camunda(流程)模块。
而springmvc使用hibernate,camunda使用jpa的entityManager。
二 解决
在service中,添加@Transactional
以代码为例:
@Transactional @Service public class ApproveImpl implements ApproveService { @Autowired RepositoryService repositoryService; @Autowired private RuntimeService runtimeService; @Autowired private TaskService taskService; @Autowired HistoryService historyService; @Autowired CrmCompanyService crmCompanyService; @Override public List<CrmCompany> companys(String user) { //camunda 的调用 List<Task> tasks = taskService.createTaskQuery() .taskAssignee(user) .orderByTaskCreateTime().asc() .active() .list(); //获取业务key List<Integer> businessKeys=tasks .stream() .map(x->Integer.parseInt(runtimeService.createProcessInstanceQuery().processInstanceId(x.getProcessInstanceId()).singleResult().getBusinessKey())) .collect(Collectors.toList()); //hibernate 的调用 List<CrmCompany> crmCompanies=crmCompanyService.findList(businessKeys); return crmCompanies; } }