== attempt 1: a stock Spring Boot JPA application ==
$ java -jar target/transactions-1.0.0.jar

  org.springframework.transaction.NestedTransactionNotSupportedException
  Transaction manager does not allow nested transactions by default - specify 'nestedTransactionAllowed' property with value 'true'

== attempt 2: nestedTransactionAllowed = true, as the message instructs ==
$ java -jar target/transactions-1.0.0.jar --demo.nested-allowed=true

  org.springframework.transaction.NestedTransactionNotSupportedException
  JpaDialect does not support savepoints - check your JPA provider's capabilities

A different message, from a second check. The savepoint manager is obtained from the
object the JpaDialect returns when it begins the transaction, and Hibernate's does not
implement one -- so no amount of configuration gets NESTED working here.

== attempt 3: the same propagation on a JDBC transaction manager ==
$ curl -s localhost:8081/tx/nested-jdbc

  {
      "rowsVisibleInsideNestedScope": 2,
      "nestedScopeThrew": "nested scope fails",
      "rowsAfterNestedRollback": 1,
      "rowsAfterOuterCommit": 1,
      "surviving": [
          "outer-row"
      ],
      "transactionManager": "DataSourceTransactionManager (not JpaTransactionManager)"
  }

This is what NESTED is for: the nested scope rolled back to its savepoint, the outer
transaction carried on and committed, and one of the two rows survived.

A savepoint is a JDBC concept. DataSourceTransactionManager holds the JDBC connection
and can issue one; JpaTransactionManager holds an EntityManager and cannot. The
reference documentation does say NESTED works with JDBC resource transactions -- what
it does not say is that the JPA path fails, twice, with two different messages.
