Yes, the container will commit the transaction. There is no reason for the container not to commit it. How should the container know that an exception has been thrown during execution of the stored procedure. The thing is: The DB will not have anything to commit (internally), so that's not the important part. but why don't you invoke setRollbackOnly(true) as that is the appropriate action to take for the developer if he catches such an exception?