The transaction timeout never kicks in when using the HibernateTransactionManager (and I suspect the same is true for HibernateTxScopeTransactionManager). This is a big problem in many cases where a client communication level timeout kicks in but the transaction completes after this without any possibility of returning the outcome to the client.
I think that in DoCommit() there needs to be a timeout check possibly combined with a Session flush. Something like this:
1. If transaction deadline is passed raise timeout exception
2. If the session flush mode is auto or commit flush the session and once again check the transaction deadline.
3. Commit the transaction.
If this sound reasonable I could provide implementation/unit test and create a pull request.