我正在运行一个游戏作业!这需要一段时间(超过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()相同(即不更新任何内容)。有谁知道怎么解决这个问题吗?
谢谢!
发布于 2012-01-07 00:04:48
作业执行是事务性的。你在工作中所做的一切都将在工作结束时提交。
要实现您想要的功能,您可以创建子作业类并在主作业类中调用它。
就像这样
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();您的子作业将在另一个事务中执行保存,该事务将在子作业结束时提交。
小心,我们这种工作方式你不能回滚所有的主要工作
https://stackoverflow.com/questions/8759801
复制相似问题