Well it is getting a transaction/connection that is still open. So there must be a missing commit on a transaction or rollback. Or you didn't call session.close() somewhere, there must be a path in your code somewhere where that doesn't happen. Maybe you have close within the try portion of your code so if a different exception occurs it never gets to that close() call.
Can't know for sure since we can't see any of your code.