मैं इस नियम को मैन्युअल रूप से लागू करने के लिए कोड का उपयोग करूंगा। मुख्य विचार यह है कि संग्रह बी को अच्छी तरह से समझाया जाना चाहिए ताकि ग्राहक केवल अपनी सामग्री को सार्वजनिक विधि से बदल सके (यानी 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 रिकॉर्ड को हटाने के लिए कहना सही है।