【问题标题】: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();
    

    您的子作业将在另一个事务中执行保存,该事务将在子作业结束时提交。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多