PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Annotations Hibernate - Insensible à la casse UniqueConstraint

Je suggérerais d'aborder ce problème sous un angle différent :

  1. ajoutez une nouvelle colonne, interne, appelez-la lcname (pour un nom en minuscules)

    @NotEmpty
    @Column(nullable = false)
    private String lcname;
    
  2. modifiez la contrainte que vous avez définie comme annotation pour utiliser le nouveau champ à la place :

    @Entity
    @Table(uniqueConstraints={@UniqueConstraint(columnNames={"lcname"})})
    public class Component extends Model {
        ...
    }
    
  3. modifier le paramètre de nom pour définir également lcname avec une minuscule du nom d'origine fourni par le client

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

C'est ça. Chaque fois que l'entité sera conservée, un nom en minuscule sera également enregistré. De cette façon, si vous enregistrez "A", vous aurez un enregistrement avec lcname ="a" enregistré, et la prochaine fois que vous essayez d'enregistrer une entité avec le nom "a", l'opération échouera en raison de la contrainte sur lcnameLe changement est complètement transparent à quiconque récupère une entité de la base de données puisque lcname est privé et qu'il n'y a pas de getter pour cela, tandis que le getName d'origine renverra le nom d'origine tel que fourni initialement par le client qui l'a créé.