То, что в объектной модели это выражение
uniqueConstraints = @UniqueConstraint (columnNames = "email")
* Использование 1003 * вовсе не означает, что в таблице действительно создано ограничение для столбца.
Documenttation:
... Используйте аннотацию @UniqueConstraint, чтобы указать, что уникальное ограничение должно быть включено в сгенерированный DDL для первичной или вторичной таблицы. ...
Это не значит, что что-то будет проверено во время выполнения.
Убедитесь, что это ограничение столбца действительно существует на уровне таблицы базы данных.
Я полагаю, вы используете весну?
Вам необходимо использовать это свойство:
spring.jpa.hibernate.ddl-auto = none/create/update/validate <- select this
Это создаст / обновит / проверит схему при запуске контекста.
validate - просто сравните ваше определение сущности (@Entity) с тем, что описано в схеме базы данных (типы, столбцы, ограничения и т. д.), и выдаст ошибку, если, например, в схему не добавлено ограничение.
После добавления ограничения данных в этот столбец вы будете получать исключение нарушения ограничения при каждом его получении.