Обновление строки в Play Framework при запуске задания - PullRequest
0 голосов
/ 06 января 2012

Я управляю работой в игре!Это занимает некоторое время (более 1 часа).Во время этой работы я хочу сохранить некоторые идентификаторы в моей базе данных 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 Ответ

4 голосов
/ 06 января 2012

Выполнение задания является транзакционным. Все, что вы делаете в своей работе, будет передано в конце работы.

Чтобы достичь того, чего вы хотите, вы можете создать вспомогательный класс и вызвать его в главном классе.

Что-то вроде

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();

Ваш подчиненный выполнит сохранение в другой транзакции, которая будет зафиксирована в конце этого задания.

Будьте осторожны, мы при таком способе работы не можем откатить всю основную работу

...