I guess you will have to try a little with your persistence-context settings.
The cancel method is part of the transaction and it seems that it is flushed there.
Maybe "@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)" helps you.
I don't understand!
Why the update is calling, I think that in all application the data only should persist/update when I call the action.
Ps.: I'm using EntityHome of Seam.
Try using manual flush mode.
I tried to use flush manual, but didn´t works.