PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Chú thích ngủ đông - UniqueConstraint không phân biệt chữ hoa chữ thường

Tôi khuyên bạn nên tấn công vấn đề này từ một góc độ khác:

  1. thêm một cột mới, một cột bên trong, gọi nó là lcname (viết tắt của tên viết thường)

    @NotEmpty
    @Column(nullable = false)
    private String lcname;
    
  2. thay đổi ràng buộc bạn đặt làm chú thích để sử dụng trường mới thay thế:

    @Entity
    @Table(uniqueConstraints={@UniqueConstraint(columnNames={"lcname"})})
    public class Component extends Model {
        ...
    }
    
  3. sửa đổi bộ đặt tên để cũng đặt lcname bằng chữ thường của tên gốc do khách hàng cung cấp

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

Đó là nó. Mỗi khi thực thể sẽ được duy trì, thì một tên lồng ghép thấp hơn cũng sẽ được lưu. Bằng cách đó nếu bạn lưu "A", bạn sẽ có một bản ghi với lcname ="a" được lưu và lần tiếp theo bạn cố gắng lưu một thực thể với tên "a", thao tác sẽ không thành công do ràng buộc trên lcname. Thay đổi hoàn toàn minh bạch cho bất kỳ ai tìm nạp một thực thể từ cơ sở dữ liệu vì lcname là riêng tư và không có getter cho nó, trong khi getName ban đầu sẽ trả về tên ban đầu như được cung cấp ban đầu bởi khách hàng đã tạo nó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chèn câu lệnh chuẩn bị vào cơ sở dữ liệu - PSQL

  2. Truy vấn đệ quy với tổng trong Postgres

  3. Hướng dẫn bất hợp pháp:4 khi chạy Django

  4. Nhà cung cấp dịch vụ đám mây Deep-Dive:PostgreSQL trên Microsoft Azure

  5. IServiceCollection không chứa định nghĩa hoặc phần mở rộng cho AddNpgsql