Actually no. `performRollback` rolls the whole transaction back (i.e. to the beginning). `conn.rollback(savepoint)` rolls back only to the savepoint.

I.e. with the following series of events:

1. TX begins
2. Action 1
3. var savepoint = setSavepoint
4. Action 2
5. rollback(savepoint)
6. Action 3

Only Action 2 is cancelled. With performRollback it would rollback also Action 1 and the transaction could not continue to Action 3 because the whole transaction has been marked for rollback. With rollback(savepoint) the transaction can continue to Action 3.