gpt4 book ai didi

java - 从 spring 调度程序调用刷新()时出现实体不受管理的异常

转载 作者:行者123 更新时间:2023-12-02 03:35:05 24 4
gpt4 key购买 nike

在我的应用程序中,我创建了一个调度程序类。从该类中,我调用一个服务方法,该方法不是单个事务。事务在存储库层进行管理。代码将如下所示,

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:实体不受管理。三个调用是三个不同的事务。

但是我试图从 Spring Controller 调用这个方法(doAction),它工作正常。但是从调度程序类调用失败。

最佳答案

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

entityManager.merge(user);

在调用refresh(user)之前。在执行该操作之前,该实体需要处于持久性上下文的托管状态。并且当前一个事务结束时,就处于分离状态。

关于java - 从 spring 调度程序调用刷新()时出现实体不受管理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56865749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com