Saya akan menyarankan untuk menyerang masalah ini dari sudut yang berbeda:
-
tambahkan kolom baru, kolom internal, sebut saja lcname (singkatan dari nama dengan huruf kecil)
@NotEmpty @Column(nullable = false) private String lcname;
-
ubah batasan yang Anda tetapkan sebagai anotasi untuk menggunakan bidang baru sebagai gantinya :
@Entity @Table(uniqueConstraints={@UniqueConstraint(columnNames={"lcname"})}) public class Component extends Model { ... }
-
ubah penyetel nama untuk juga menyetel lcname dengan huruf kecil dari nama asli yang disediakan oleh klien
public void setName(String name) { this.name = name; this.lcname = name.toLowerCase(); }
Itu dia. Setiap kali entitas akan dipertahankan, nama dengan huruf kecil juga akan disimpan. Dengan begitu jika Anda menyimpan "A", Anda akan memiliki catatan dengan lcname ="a" disimpan, dan lain kali Anda mencoba untuk menyimpan entitas dengan nama "a" operasi akan gagal karena kendala pada lcnamePerubahan benar-benar transparan kepada siapa saja yang mengambil entitas dari database karena lcname bersifat pribadi dan tidak ada pengambil untuknya, sedangkan getName asli akan mengembalikan nama asli seperti yang awalnya diberikan oleh klien yang membuatnya.