You need to remove the Coupon from the parent collections. You can either do that manually in the service where you delete the Coupon, or you can user hibernate events to do so. I dont think you can have a cascade do this. The closest you can get is 'delete-orphan', but you still need to break the association for that to work.
See section 5.5.1 of the manual.
http://grails.org/doc/latest/
Basically, you can add a 'beforeDelete' method to your Coupon class that removes its reference from its parents.
grails is smart enough to fire the beforeDelete method, you guessed it, before the coupon is deleted. Its a good place to break the associations.
Whether you do it 'manually' in a service or domain class, or you use hibernate events, the code will be almost the same. Make sure you write an integration test for it...