sql >> Databasteknik >  >> RDS >> PostgreSQL

Vilolägesanteckningar - Skiftlägesokänslig UniqueConstraint

Jag skulle föreslå att du attackerar det här problemet från en annan vinkel:

  1. lägg till en ny kolumn, intern en, kalla den lcname (står för namn med små bokstäver)

    @NotEmpty
    @Column(nullable = false)
    private String lcname;
    
  2. ändra begränsningen du anger som anteckning för att använda det nya fältet istället :

    @Entity
    @Table(uniqueConstraints={@UniqueConstraint(columnNames={"lcname"})})
    public class Component extends Model {
        ...
    }
    
  3. ändra namninställaren för att även ställa in lcname med små bokstäver av det ursprungliga namnet som tillhandahålls av klienten

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

Det är allt. Varje gång entiteten behålls sparas även ett namn med gemener. På det sättet om du sparar "A" kommer du att ha en post med lcname ="a" sparad, och nästa gång du försöker spara en enhet med namnet "a" kommer operationen att misslyckas på grund av begränsningen på lcname. Ändringen är helt transparent till alla som hämtar en entitet från databasen eftersom lcname är privat och det inte finns någon getter för det, medan det ursprungliga getName kommer att returnera det ursprungliga namnet som ursprungligen gavs av klienten som skapade det.



  1. Postgresql. SKAPA CAST "karaktär varierande" till "heltal"

  2. Felaktig guidebeställning

  3. Lägger till bild till blob (mysql) via c#

  4. Använda spåra kausalitet för att förstå frågekörning