运行作业时更新Play Framework中的行

时间:2012-01-06 15:02:00

标签: java database jpa playframework persistence

我在玩游戏!需要一段时间(超过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()具有相同的结果(即没有更新)。任何人都知道如何解决这个问题?

谢谢!

1 个答案:

答案 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结尾处提交的事务中执行保存。

小心,我们这种工作方式你无法回滚所有的主要工作