O
unique=true
elemento da Column
anotação e/ou a UniqueConstraint
anotação que pode ser usada no nível da tabela são usadas para especificar que uma restrição exclusiva deve ser incluída no DDL gerado . Em outras palavras, eles não fazem nada durante o tempo de execução, a verificação é deixada para o banco de dados (o que faz sentido, pois a unicidade não pode ser testada no nível Java de maneira confiável) e se por algum motivo você não tiver o correspondente restrição(ões) definida(s) no nível do banco de dados, nada acontecerá.
Adicione a restrição manualmente:
ALTER TABLE Customer ADD CONSTRAINT customer_name_unq UNIQUE (name);
Veja também
- Especificação JPA 1.0
- 9.1.4 Anotação de restrição exclusiva
- 9.1.5 Anotação de coluna
- Documentação do MySQL
A menos que você adquira um bloqueio de tabela (ai!), você não pode verificar a unicidade com uma consulta SQL em um ambiente simultâneo.