PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

हाइबरनेट एनोटेशन - केस असंवेदनशील UniqueConstraint

मैं इस समस्या पर एक अलग कोण से हमला करने का सुझाव दूंगा:

  1. एक नया कॉलम जोड़ें, आंतरिक एक, इसे lcname कहें (लोअर-केसेड नाम के लिए खड़ा है)

    @NotEmpty
    @Column(nullable = false)
    private String lcname;
    
  2. इसके बजाय नए फ़ील्ड का उपयोग करने के लिए एनोटेशन के रूप में आपके द्वारा सेट की गई बाधा को बदलें:

    @Entity
    @Table(uniqueConstraints={@UniqueConstraint(columnNames={"lcname"})})
    public class Component extends Model {
        ...
    }
    
  3. क्लाइंट द्वारा प्रदान किए गए मूल नाम के निचले मामले के साथ lcname भी सेट करने के लिए नाम सेटर को संशोधित करें

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

यही बात है। हर बार जब इकाई बनी रहेगी, तो एक निचला केस नाम भी सहेजा जाएगा। इस तरह यदि आप "ए" को सहेजते हैं तो आपके पास एलसीनाम ="ए" सहेजा गया रिकॉर्ड होगा, और अगली बार जब आप "ए" नाम वाली इकाई को सहेजने का प्रयास करेंगे तो lcname पर बाधा के कारण ऑपरेशन विफल हो जाएगा परिवर्तन पूरी तरह से पारदर्शी है किसी भी व्यक्ति के लिए जो डेटाबेस से एक इकाई प्राप्त करता है क्योंकि lcname निजी है और इसके लिए कोई गेट्टर नहीं है, जबकि मूल getName मूल नाम वापस कर देगा जैसा कि इसे बनाने वाले क्लाइंट द्वारा शुरू में प्रदान किया गया था।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. POSTGIS:बहुभुज के भीतर सभी बिंदु खोजें

  2. विंडोज़ पर PostgreSQL को मैन्युअल रूप से कैसे कॉन्फ़िगर और प्रारंभ करें?

  3. पोस्टग्रेज़ को पता नहीं है कि सर्वर कॉन्फ़िगरेशन फ़ाइल कहाँ मिलेगी

  4. psql के लिए वैकल्पिक आउटपुट स्वरूप

  5. रेल में LOWER (users.username) पर इंडेक्स कैसे बनाएं (पोस्टग्रेज का उपयोग करके)