我在玩游戏!需要一段时间(超过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()具有相同的结果(即没有更新)。任何人都知道如何解决这个问题?
谢谢!
答案 0 :(得分:4)
作业执行是交易性的。你在工作中所做的一切都将在工作结束时被提交。
为了达到你想要的效果,你可以创建一个subjob类,并在主要类中调用它。
像
这样的东西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();
您的subjob将在另一个将在subjob结尾处提交的事务中执行保存。
小心,我们这种工作方式你无法回滚所有的主要工作