Как использовать session.flush () внутри транзакции в спящем режиме - PullRequest
0 голосов
/ 12 апреля 2019

Я переношу hibernate с 3.X на версию 5.4.2 hibernate.Я получаю сообщение об ошибке ниже при выполнении операции очистки

javax.persistence.TransactionRequiredException: no transaction is in progress
    at org.hibernate.internal.AbstractSharedSessionContract.checkTransactionNeededForUpdateOperation(AbstractSharedSessionContract.java:398)
    at org.hibernate.internal.SessionImpl.checkTransactionNeededForUpdateOperation(SessionImpl.java:3619)
    at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1474)
    at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1470)

После установки значения hibernate.allow_update_outside_transaction=true все работает нормально.Я не хочу использовать свойство hibernate.allow_update_outside_transaction=true., поскольку оно противоречит концепции атомарности.Есть ли способ запустить сброс в транзакции.

1 Ответ

0 голосов
/ 12 апреля 2019

Нет, никак.

Если вы не установите hibernate.allow_update_outside_transaction=true, по умолчанию это будет false и будет запрещать любые операции обновления за пределами границы транзакции.Это видно даже по названию исключения.

Но почему свойство hibernate.allow_update_outside_transaction=true противоречит концепции атомарности?Напротив, концепция атомарности предполагает, что набор операций будет выполняться атомарно, то есть либо полностью успешно, либо полностью провалится.Транзакции просто обеспечивают эту атомарность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...