Вы должны просто сосредоточиться на изящной обработке уникального нарушения ограничения.
Вы можете сделать это, перехватив исключение ConstraintViolationException. Если вы хотите быть более зернистым, если, возможно, существуют множественные нарушения, вы можете сделать что-то вроде этого:
...
} catch (ConstraintViolationException e) {
if (e.getConstraintName() != null && e.getConstraintName().toLowerCase().equals("the_name_of_your_contraint")) {
// do something, like add an error to be displayed on the UI
}
}