Currently, transaction handling is very unclean.
- Transaction.beginOptional sets autocommit to false on a connection under certain conditions, but Transaction.commit() does not know what autocommit was beforehand and sets it to true under certain conditions, regardless of the connection state before
- The field Criteria.useTransaction can be used to disable the autocommit switching when starting a transaction (but not the switching back)
Autocommit should be handled by the connection pool, not by the OR Mapper, and should be removed from the Torque code. This would lead to the following modifications
- remove the Transaction.beginOptional method
- remove the useTransaction field from Criteria
If an explicit transaction handling is desired, this can still be done by doing the connection/transaction handling in application code and using the methods which take a transaction.