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

标签 java database jpa playframework persistence

我正在 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() 相同(即没有任何更新)。有人知道如何解决这个问题吗?

谢谢!

最佳答案

作业执行是事务性的。你在工作中所做的一切都将在工作结束时得到落实。

要实现您想要的目标,您可以创建一个子作业类并在主作业类中调用它。

类似于

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/

相关文章:

java - hibernate中的继承,其中派生类没有关联表

java - 优化插入多个具有嵌入式主键的实体时的 JPA 性能

java - 如何在java中查找arraylist的重复对象

java - 通过 getter 和 setter 更新 pojo 的通用方法

sql - 将数据从 txt 文件导入 IBM netezza SQL 数据库时出错

mysql - 根据这些要求用于我的网站的数据库、技术、引擎等

java - 如何设计一个互斥但独立并发方法的任务队列?

java - Android 2.1 如何创建狙击风格游戏

javascript - 在 MySQL 中使用多数据库查询与单数据库查询的比较

java - @Column 或 @Basic JPA 注释在 spring-data-jpa 模式创建中被忽略