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

जेपीए में संग्रह के आकार को सीमित करें

मैं इस नियम को मैन्युअल रूप से लागू करने के लिए कोड का उपयोग करूंगा। मुख्य विचार यह है कि संग्रह बी को अच्छी तरह से समझाया जाना चाहिए ताकि ग्राहक केवल अपनी सामग्री को सार्वजनिक विधि से बदल सके (यानी addB() ) . बस इस नियम को इस विधि के अंदर सुनिश्चित करें (addB() ) यह सुनिश्चित करने के लिए कि संग्रह B के अंदर प्रविष्टियों की संख्या एक मान से अधिक नहीं हो सकती है।

ए:

@Entity
public class A {


    public static int MAX_NUM_B = 4;

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    private Set<B> b= new LinkedHashSet<B>();

    public void addB(B b) {
        if (this.b.size() == MAX_NUM_B) {
            Iterator<B> it = this.b.iterator();
            it.next();
            it.remove();
        }
        this.b.add(b);
    }

    public Set<B> getB() {
        return Collections.unmodifiableSet(this.b);
    }
}

बी:

@Entity 
public class B{

    @ManyToOne
    private A a;
}

मुख्य बिंदु:

  • ए रिश्ते का मालिक होना चाहिए।
  • A में, केवल B को वापस न करें क्योंकि क्लाइंट addB(B b) में लागू चेकिंग लॉजिक को बायपास कर सकता है और इसकी सामग्री को स्वतंत्र रूप से बदलें। इसके बजाय, B का एक अपरिवर्तनीय दृश्य लौटाएं।
  • @OneToMany में, orphanRemoval सेट करें JPA को B संग्रह से संबंधित उदाहरणों को हटा दिए जाने के बाद B के DB रिकॉर्ड को हटाने के लिए कहना सही है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. अल्पविराम सूची में MySQL खोज

  2. MySQL फ़ंक्शन में त्रुटि कैसे उत्पन्न करें

  3. PHP कैशिंग - क्या डेटाबेस में सहेजना या फ़ाइल बनाना तेज़ है?

  4. AVG क्वेरी के लिए तालिका का अनुकूलन कैसे करें?

  5. mysql तालिका में टैग खोजने का एक बेहतर तरीका