sql >> Database >  >> RDS >> PostgreSQL

Annotaties in slaapstand - Hoofdletterongevoelig UniqueConstraint

Ik stel voor om dit probleem vanuit een andere hoek aan te pakken:

  1. voeg een nieuwe kolom toe, interne, noem het lcname (staat voor naam in kleine letters)

    @NotEmpty
    @Column(nullable = false)
    private String lcname;
    
  2. verander de beperking die je als annotatie hebt ingesteld om in plaats daarvan het nieuwe veld te gebruiken:

    @Entity
    @Table(uniqueConstraints={@UniqueConstraint(columnNames={"lcname"})})
    public class Component extends Model {
        ...
    }
    
  3. wijzig de naamzetter om ook lcname in te stellen met een kleine letter van de originele naam die door de klant is opgegeven

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

Dat is het. Elke keer dat de entiteit wordt behouden, wordt ook een naam in kleine letters opgeslagen. Op die manier, als je "A" opslaat, heb je een record met lcname ="a" opgeslagen, en de volgende keer dat je probeert een entiteit met de naam "a" op te slaan, zal de bewerking mislukken vanwege de beperking op lcname. De wijziging is volledig transparant aan iedereen die een entiteit uit de database ophaalt, aangezien lcname privé is en er geen getter voor is, terwijl de oorspronkelijke getName de oorspronkelijke naam retourneert zoals deze oorspronkelijk is opgegeven door de client die deze heeft gemaakt.



  1. Cumulatieve som over dagen

  2. Hoe subquery te gebruiken om Mysql SELECT LIMIT offset te definiëren?

  3. Achterwaartse scan van SQL Server Index:inzicht en prestatieafstemming

  4. MySQL -- Joins tussen databases op verschillende servers met Python?