Hope I got you well.
Quote:
However, even though we catch the ConstraintViolationException, the insert still exists in the ActionQueue (even after a flush) so that the exception will continue to be thrown. Is there a better way to do this in hibernate?
If you received an exception, trash the session, it's unusable. This is part of the best practices of Hibernate : never try and keep on using a session when an exception has been thrown. Create a new one and then do what you need.
Another info : Hibernate never performs any uniqueness check. For example, when you put unique="true", it's only to inform SchemaUpdate that it should generate a unique key contraint in the DDL.