PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Adnotacje hibernacji — UniqueConstraint bez uwzględniania wielkości liter

Sugerowałbym zajęcie się tym problemem z innej perspektywy:

  1. dodaj nową kolumnę, wewnętrzną, nazwij ją lcname (oznacza nazwę pisaną małymi literami)

    @NotEmpty
    @Column(nullable = false)
    private String lcname;
    
  2. zmień ograniczenie ustawione jako adnotacja, aby zamiast tego używało nowego pola:

    @Entity
    @Table(uniqueConstraints={@UniqueConstraint(columnNames={"lcname"})})
    public class Component extends Model {
        ...
    }
    
  3. zmodyfikuj ustawiacz nazw, aby ustawić lcname z małą literą oryginalnej nazwy dostarczonej przez klienta

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

Otóż ​​to. Za każdym razem, gdy encja zostanie utrwalona, ​​zapisana zostanie również nazwa pisana małymi literami. W ten sposób, jeśli zapiszesz „A”, będziesz miał zapisany rekord z lcname =„a”, a następnym razem, gdy spróbujesz zapisać encję o nazwie „a”, operacja się nie powiedzie z powodu ograniczenia lcname.Zmiana jest całkowicie przezroczysta każdemu, kto pobierze jednostkę z bazy danych, ponieważ lcname jest prywatne i nie ma dla niego pobierającego, podczas gdy oryginalna getName zwróci oryginalną nazwę podaną początkowo przez klienta, który ją utworzył.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiedy Postgres sprawdza unikalne ograniczenia?

  2. Wybierz z SUM() wielu kolumn i dołącz do postgreSQL

  3. jak zebrać wiele wartości jako jeden ciąg w postgresie?

  4. SQL 'AT TIME ZONE', zapytanie szerokie i wyrażenie 'SELECT' dla wszystkich kolumn (nazwa_tabeli.*)

  5. initdb:nie można zmienić uprawnień katalogu w kontenerze Postgresql