为了账号安全,请及时绑定邮箱和手机立即绑定

从 spring 调度程序调用 refresh() 时实体未管理异常

从 spring 调度程序调用 refresh() 时实体未管理异常

潇潇雨雨 2023-03-02 15:21:31
在我的应用程序中,我创建了一个调度程序类。从那个类,我正在调用一个服务方法,它不是一个单一的事务。事务在存储库层进行管理。代码看起来像这样,public void doAction(int id){  User user = repository.getUser(id);//transaction 1   repository.updateStatus(user);// transaction 2   repository.refresh():// call entityManager.refresh() internally}从存储库获取用户实体后,我正在更新状态。然后通过调用 entityManager.refresh() 刷新用户实体。但是在调用 refresh () 时,它抛出异常:InvalidArgumentException: Entity not managed。三个调用是三个不同的事务。但我试图从 Spring Controller 调用此方法 (doAction),它工作正常。但是从调度程序类调用失败。
查看完整描述

1 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

由于这些调用是在它们自己的事务中进行的,因此您需要调用:

entityManager.merge(user);

在你打电话之前refresh(user)。在执行该操作之前,该实体需要处于持久性上下文的托管状态。而当前一个事务结束时,它处于分离状态。


查看完整回答
反对 回复 2023-03-02
  • 1 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信