It is tempting to use refresh() as an "undo" method when it was not designed as such. The manual is clear about how refresh() should be used, but doesn't mention how it should NOT be used. Refresh will not work on the following case:
It results in this:
The presence of cascade type REFRESH makes it sound like this should work. The documentation needs to be more specific about not using refresh() as an undo facility. Hibernate itself is not a transaction handler.