Navrhoval bych zaútočit na tento problém z jiného úhlu:
-
přidejte nový sloupec, interní, nazvěte jej lcname (znamená název s malými písmeny)
@NotEmpty @Column(nullable = false) private String lcname;
-
změňte omezení, které jste nastavili jako anotaci, aby místo toho použilo nové pole:
@Entity @Table(uniqueConstraints={@UniqueConstraint(columnNames={"lcname"})}) public class Component extends Model { ... }
-
upravte nastavení názvu tak, aby také nastavilo lcname na malá písmena původního názvu poskytnutého klientem
public void setName(String name) { this.name = name; this.lcname = name.toLowerCase(); }
A je to. Pokaždé, když bude entita zachována, uloží se také název s malými písmeny. Tímto způsobem, pokud uložíte "A", budete mít uložený záznam s lcname ="a" a při příštím pokusu o uložení entity s názvem "a" operace selže kvůli omezení na lcname Změna je zcela transparentní komukoli, kdo načte entitu z databáze, protože lcname je soukromé a neexistuje pro něj žádný getter, zatímco původní getName vrátí původní název, který původně zadal klient, který jej vytvořil.