sql >> Base de Datos >  >> RDS >> PostgreSQL

Anotaciones de Hibernate - UniqueConstraint insensible a mayúsculas y minúsculas

Sugeriría atacar este problema desde un ángulo diferente:

  1. agregue una nueva columna, una interna, llámela lcname (significa nombre en minúsculas)

    @NotEmpty
    @Column(nullable = false)
    private String lcname;
    
  2. cambie la restricción que estableció como anotación para usar el nuevo campo en su lugar:

    @Entity
    @Table(uniqueConstraints={@UniqueConstraint(columnNames={"lcname"})})
    public class Component extends Model {
        ...
    }
    
  3. modifique el setter de nombre para establecer también lcname con una minúscula del nombre original proporcionado por el cliente

    public void setName(String name) {
        this.name = name;
        this.lcname = name.toLowerCase();
    }
    

Eso es todo. Cada vez que se persista la entidad, también se guardará un nombre en minúsculas. De esa manera, si guarda "A", tendrá un registro con lcname ="a" guardado, y la próxima vez que intente guardar una entidad con el nombre "a", la operación fallará debido a la restricción en lcname. El cambio es completamente transparente. a cualquier persona que obtenga una entidad de la base de datos, ya que lcname es privado y no hay un getter para él, mientras que getName original devolverá el nombre original proporcionado inicialmente por el cliente que lo creó.