【问题标题】:Update row in Play Framework when running a job运行作业时更新 Play Framework 中的行
【发布时间】:2012-02-04 07:09:53
【问题描述】:
我正在 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() 具有相同的结果(即没有更新)。有人知道如何解决这个问题吗?
谢谢!
【问题讨论】:
标签:
java
database
jpa
playframework
persistence
【解决方案1】:
作业执行是事务性的。您在工作中所做的一切都将在工作结束时承诺。
要实现您想要的,您可以创建一个子作业类并在主类中调用它。
类似
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();
您的子作业将在另一个事务中执行保存,该事务将在子作业结束时提交。
小心,我们这种工作方式你不能回滚所有的主要工作