sql >> Database teknologi >  >> RDS >> PostgreSQL

Dvale annoteringer - Ufølsom for store og små bogstaver UniqueConstraint

Jeg vil foreslå at angribe dette problem fra en anden vinkel:

  1. tilføj en ny kolonne, intern, kald den lcname (står for navn med små bogstaver)

    @NotEmpty
    @Column(nullable = false)
    private String lcname;
    
  2. ændre den begrænsning, du angiver som anmærkning, for at bruge det nye felt i stedet :

    @Entity
    @Table(uniqueConstraints={@UniqueConstraint(columnNames={"lcname"})})
    public class Component extends Model {
        ...
    }
    
  3. rediger navneindstilleren til også at sætte lcname med små bogstaver af det originale navn, som er angivet af klienten

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

Det er det. Hver gang entiteten vil blive bevaret, gemmes også et navn med små bogstaver. På den måde, hvis du gemmer "A", vil du have en post med lcname ="a" gemt, og næste gang du forsøger at gemme en enhed med navnet "a", vil operationen mislykkes på grund af begrænsningen på lcname Ændringen er fuldstændig gennemsigtig til enhver, der henter en enhed fra databasen, da lcname er privat, og der ikke er nogen getter for det, mens det originale getName vil returnere det originale navn, som oprindeligt blev angivet af klienten, der oprettede det.



  1. Erstat flere tegn i en streng i SQL Server (T-SQL)

  2. JSON_CONTAINS() Eksempler i MySQL

  3. Skinner:Ingen forbindelsespulje til ActiveRecord::Base

  4. ora-00972 identifikator er for lang orakel 10g