Hibernate не может этого сделать.Однако вы можете сделать это самостоятельно.По сути, есть два варианта:
- Проверка на наличие дубликатов перед вставкой;или
- Перехватите ConstraintViolationException, а затем убедитесь, что нарушение вызвано дублированием (поскольку могут быть и другие причины, например, нулевые поля).
У первого есть недостаток:вы проверяете наличие дубликатов на каждой вставке, когда вероятность наличия дубликата может быть низкой.Последнее будет быстрее для обычного случая, когда дубликатов не возникает, но имеет недостаток, заключающийся в том, что вам нужно проверять дубликаты после лица.Когда создается ConstraintViolationException, он делает недействительным текущий сеанс;это означает, что вам нужно будет выполнить очистку перед выполнением поиска дубликата.
Проверка на наличие дубликатов перед вставкой, вероятно, является самым чистым подходом, если только нет серьезных проблем с производительностью, о которых вам нужно беспокоиться.Убедитесь, что вы выполняете поиск и вставку в транзакцию, чтобы кто-то не добавил дубликат между поиском и вставкой, в противном случае вы получите ConstraintViolationException.