Unlike v2, on-demand SQL objects in v3 no longer "hold the door open" for outstanding operations. This is to close the loop on resource cleanup so that it's very hard to e.g. leak a database connection.
If you need to do multiple operations at once on an on-demand SQL object, you would call e.g. `myDao.inTransaction(dao -> { dao.doStuff(); dao.doOtherStuff(); }`.
However we noticed that the `Transactional` was a problem with on-demand SQL objects: if you call `dao.begin()`, it would start a transaction, and immediately commit it before the `begin()` method returns. Successive calls would execute in isolation instead of in a transaction.
We added this exception in v3 to detect this scenario, and warn users.
I don't use Spring, so am largely ignorant about what `jdbi3-spring4` is doing. Can anybody explain what JdbiUtil.getHandle() is supposed to do? What is TransactionSynchronizationManager about? It appears that method is just opening a handle, and possibly opening a transaction on it--in which case that would definitely explain your error.