我正在 Play 中运行作业!这需要一段时间(超过1小时)。在这项工作中,我想将一些 id 保存到我的 MySQL 数据库中。但是,写入数据后,如果我在终端中查询数据库(使用 MySQL 监视器),行似乎没有更新。所以..我需要在作业运行时更新这些数据。
这是代码:
this.ga.lastUID = msgnums[i-1];
this.ga.count = count[i-1];
this.ga.merge();
其中 this.ga 是我的 JPA 模型的实例。
如果我使用 save() 方法,我会收到一个分离的异常。如果我使用 findById(this.ga.id) 方法来获取新对象,我可以使用 save() 但它的结果与 merge() 相同(即没有任何更新)。有人知道如何解决这个问题吗?
谢谢!
最佳答案
作业执行是事务性的。你在工作中所做的一切都将在工作结束时得到落实。
要实现您想要的目标,您可以创建一个子作业类并在主作业类中调用它。
类似于
public class SubJob extends Job {
private Ga ga;
public SubJob(Ga ga) {
this.ga = ga;
}
@Override
public doJob() throws Exception {
ga = ga.merge();
ga.lastUID = msgnums[i-1];
ga.count = count[i-1];
ga.save();
}
}
在你的主要工作中你称之为
new SubJob(ga).now().get();
您的子作业将在另一个事务中执行保存,该事务将在子作业结束时提交。
小心,我们这种工作方式你无法回滚所有主要工作
关于java - 运行作业时更新 Play Framework 中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8759801/