Почему Transactions.wasCommitted () возвращает false?

0

Я новичок в hibernate и java-ee в целом, и мне было интересно, может ли кто-нибудь сказать мне, почему этот кусок кода возвращает false, хотя, глядя на базу данных, я вижу, что транзакция действительно была совершена:

    session.beginTransaction();
    session.saveOrUpdate(user);
    session.getTransaction().commit();
    return session.getTransaction().wasCommitted(); //Always false

Спасибо!

  • 0
    Из API Javadoc: Check if this transaction was successfully committed. This method could return false even after successful invocation of commit(). As an example, JTA based strategies no-op on commit() calls if they did not start the transaction; in that case, they also report wasCommitted() as false. Не знаю, если это что-то объясняет.
  • 1
    Поскольку фиксация не обязательно произошла сразу после того, как вы ее попросили (может быть, commit () запущен в другом потоке) и т. Д. В любом случае не имеет смысла просить что-то, что вы только что сделали (это все равно, что спросить, если == 3 после выполнения = 2 + 1).
Показать ещё 1 комментарий
Теги:
hibernate
java-ee
glassfish

1 ответ

2
Лучший ответ

wasCommitted() не всегда должен возвращать true, даже если фиксация была успешной. Он вернет true, если транзакция была (однозначно) committed через эту локальную транзакцию; false в противном случае.

Из docs: -

wasCommitted

Этот метод может возвращать false даже после успешного вызова совершить(). В качестве примера, стратегии JTA, основанные на принципах no-op, для вызовов commit() если они не начали транзакцию; в этом случае они также сообщают wasCommitted() как false.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню