我正在玩游戏!这需要一段时间(超过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/