sql >> Databáze >  >> RDS >> PostgreSQL

Anotace hibernace – UniqueConstraint bez ohledu na malá a velká písmena

Navrhoval bych zaútočit na tento problém z jiného úhlu:

  1. přidejte nový sloupec, interní, nazvěte jej lcname (znamená název s malými písmeny)

    @NotEmpty
    @Column(nullable = false)
    private String lcname;
    
  2. 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 {
        ...
    }
    
  3. 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.



  1. Problém s oprávněním SQL Server 2008 OPENROWSET

  2. Aktualizace s připojením pomocí Zend-framework

  3. Přidejte roky k datu v PostgreSQL

  4. Automatické zvýšení s režimem spánku