Здравствуйте, maxkar, Вы писали:
M>Здравствуйте, Ballista, Вы писали:
B>>JpaTransactionManager
M>Это хорошо и многое объясняет. Есть отличный последний параграф в документации (выделение взято из оригинала):
M>M>This transaction manager supports nested transactions via JDBC 3.0 Savepoints. The "nestedTransactionAllowed" flag defaults to false though, since nested transactions will just apply to the JDBC Connection, not to the JPA EntityManager and its cached entity objects and related context. You can manually set the flag to true if you want to use nested transactions for JDBC access code which participates in JPA transactions (provided that your JDBC driver supports Savepoints). Note that JPA itself does not support nested transactions! Hence, do not expect JPA access code to semantically participate in a nested transaction.
M>Здесь почти все факты важны:
M>
M> Вложенные транзакции вообще выключены по-умолчанию
M> Если они включены, то применяются только к JDBC
M> JPA вообще не поддерживает вложенные транзакции ни в каком виде.
M>
M>Последнее в принципе понятно — определять семантику вложенных транзакций будет очень сложно.
да, очень похоже что именно так оно и работает. но я все же никак не пойму почему. я читаю доку тут
https://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/transaction.html#tx-propagation
PROPAGATION_REQUIRES_NEW, in contrast to PROPAGATION_REQUIRED, uses a completely independent transaction for each affected transaction scope. In that case, the underlying physical transactions are different and hence can commit or roll back independently, with an outer transaction not affected by an inner transaction’s rollback status.
nested транзакция — согласен, мутная штука. но почему у нас разговор всплыл о nested, если REQUIRES_NEW должна была создать "completely independent transaction". получается, что не смотря на заявление в документации, реально эта "completely independent transaction" все равно подвид nested транзакции на уровне JPA и лишь на уровне JDBC отдельная коннекция/транзакция.