Existem diversas validações a nível de banco para deixarmos o modelo mais seguro, uma delas é a unique Constraint, que determina uma regra para que o registro seja único.
Para que o modelo esteja bem claro a nível de código e para podermos usar validações(ex: javax.validation.ConstraintViolation) é importante que a entidade seja configurada corretamente de acordo com o banco. A baixo segue o sempre de como mapear uma unique Constraint em uma Entidade.
... import javax.persistence.Table; import javax.persistence.UniqueConstraint; @Entity @Table(uniqueConstraints = @UniqueConstraint(columnNames = "CNPJ", name = "empresa_uk")) public class Empresa { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @NotNull private String cnpj; }
- uniqueConstraints: Define a área de criação de constraints(dentro da anotação @Table), podendo ter uma ou mais;
- UniqueConstraint: Define que existe um UniqueConstraint;
- columnNames: Define quais campos formaram a regra de unico, no exemplo é o atributo CNPJ, mas poderia ser 2 atributos e a sintaxe seria : columnNames = {“CNPJ”, “TIPOPESSOA”}. Obs: é o atributo da classe, não o nome do campo no banco de dados
- name: O nome da UniqueConstraint no banco de dados.
Abaixo o SQL para criar a constraint
alter table empresa add constraint empresa_uk UNIQUE(cnpj);
Observação
Banco utilizado é o postgres, talvez o script mude de acordo com o banco.
Banco utilizado é o postgres, talvez o script mude de acordo com o banco.