PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Anotações do Hibernate - UniqueConstraint sem distinção entre maiúsculas e minúsculas


Eu sugeriria atacar esse problema de um ângulo diferente:

  1. adicione uma nova coluna, interna, chame-a de lcname (significa nome em minúsculas)
    @NotEmpty
    @Column(nullable = false)
    private String lcname;
    

  2. altere a restrição definida como anotação para usar o novo campo:
    @Entity
    @Table(uniqueConstraints={@UniqueConstraint(columnNames={"lcname"})})
    public class Component extends Model {
        ...
    }
    

  3. modifique o setter de nomes para também definir lcname com letras minúsculas do nome original fornecido pelo cliente
    public void setName(String name) {
        this.name = name;
        this.lcname = name.toLowerCase();
    }
    

É isso. Toda vez que a entidade for persistida, também será salvo um nome em minúsculas. Dessa forma, se você salvar "A" terá um registro com lcname ="a" salvo, e da próxima vez que tentar salvar uma entidade com o nome "a" a operação falhará devido à restrição em lcnameA alteração é completamente transparente para qualquer pessoa que busque uma entidade do banco de dados, pois lcname é privado e não há getter para ele, enquanto o getName original retornará o nome original fornecido inicialmente pelo cliente que o criou.