यह हाइबरनेट में एक नहीं बल्कि बुरा समस्या है और वास्तव में सामान्य रूप में ORM।
क्या होता है कि कई (fetch) जुड़ने के बजाय एक बड़े कार्टशियन उत्पाद बनने का कारण बनता है। हमेशा के लिए अर्थात अन्य नए कॉलम में शामिल होने और नई पंक्तियाँ परिणाम में दिखाई देते हैं, एक (काफी) बड़े 'वर्ग' परिणाम के लिए अग्रणी।
हाइबरनेट को इस तालिका से ग्राफ को डिस्टिल करने की आवश्यकता है, लेकिन सही इकाइयों को सही कॉलम से मिलान करने के लिए पर्याप्त स्मार्ट नहीं है।
उदा।
मान लीजिए हम परिणाम
A B C
A B D
कौन सा बनने के लिए जरूरत है:
A
|
B
/\
C D
हाइबरनेट प्राथमिक कुंजी और कुछ एन्कोडिंग जादू, क्या ग्राफ होना चाहिए से घटा सकता है, लेकिन व्यवहार में यह इस पुल को स्पष्ट मदद की जरूरत है।
ऐसा करने का एक तरीका संबंधों पर हाइबरनेट विशिष्ट @IndexColumn
या जेपीए मानक @OrderColumn
निर्दिष्ट करके है।
उदा।
@Entity
public class Question {
@ManyToMany
@JoinTable(
name = "question_to_answer",
joinColumns = @JoinColumn(name = "question_id"),
inverseJoinColumns = @JoinColumn(name = "answer_id")
)
@IndexColumn(name = "answer_order")
private List<Answer> answers;
// ...
}
इस उदाहरण में मैं एक अतिरिक्त कॉलम answer_order
के साथ एक जॉइन टेबल का उपयोग कर रहा हूं। इस स्तंभ है, जो प्रति प्रश्न/उत्तर संबंध एक अनूठा अनुक्रमिक संख्या है के माध्यम से, हाइबरनेट परिणाम तालिका में प्रविष्टियों को अलग और आवश्यक वस्तु ग्राफ बना सकते हैं।
एक नोट बीटीडब्ल्यू, यदि यह कुछ इकाइयों से अधिक चिंतित है, तो बहुत से उत्सुक जुड़ने का उपयोग करके संभावित रूप से शामिल होने वाली संस्थाओं की संख्या के आधार पर आपको लगता है कि एक बड़ा परिणाम सेट हो सकता है।
अतिरिक्त पठन:
स्रोत
2012-11-11 20:30:34
यह ध्यान देने योग्य है कि '@ IndexColumn' अब पदावनत है (वर्तमान में हाइबरनेट 5.2.4.Final का प्रयोग करके) – JRSofty