Je suggérerais d'aborder ce problème sous un angle différent :
-
ajoutez une nouvelle colonne, interne, appelez-la lcname (pour un nom en minuscules)
@NotEmpty @Column(nullable = false) private String lcname;
-
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 { ... }
-
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éé.