2010-05-10 9 views
7
Create Table A (
ID varchar(8), 
Primary Key(ID) 
); 

Create Table B (
ID varchar(8), 
A_ID varchar(8), 
Primary Key(ID), 
Foreign Key(A_ID) References A(ID) 
); 

यह देखते हुए कि मैं ऊपर SQL कथन का उपयोग कर दो तालिकाओं बनाया है, और मैं कक्षा B के लिए उनके लिए Entity कक्षाएं बनाने के लिए, चाहते हैं, मैं इन सदस्य जिम्मेदार बताते हैं:जावा जेपीए @OneToMany को @ManyToOne का सहारा देने की आवश्यकता है?

@Id 
@Column(name = "ID", nullable = false, length = 8) 
private String id; 
@JoinColumn(name = "A_ID", referencedColumnName = "ID", nullable = false) 
@ManyToOne(optional = false) 
private A AId; 

वर्ग A में, क्या मुझे कई से एक रिश्ते का सहारा देने की ज़रूरत है?

@Id 
@Column(name = "ID", nullable = false, length = 8) 
private String id; 
@OneToMany(cascade = CascadeType.ALL, mappedBy = "AId") 
private List<B> BList; //<-- Is this attribute necessary? 

यह एक आवश्यक या एक अच्छा विचार @ManyToOne के लिए एक पारस्परिक @OneToMany के लिए है? अगर मैं अब @OneToMany एनोटेटेड विशेषता को छोड़ने का डिज़ाइन निर्णय लेता हूं, तो क्या वह मुझे आगे काटने के लिए वापस आ जाएगा?

उत्तर

11

क्या यह एक आवश्यक या अच्छा विचार है कि @ManyToOne के लिए एक पारस्परिक @OneToMany है?

नहीं, यह अनिवार्य नहीं है, यह एक शुद्ध डिजाइन निर्णय है।

uni-directional

या यह (यानी एक दो-तरफा संघ):: पूरे सवाल है ... आप इस (यानी एक uni-दिशात्मक संघ) चाहते हैं

bi-directional

हैं आपको ए से बीएस प्राप्त करने की आवश्यकता नहीं है, तो आप bs विशेषता और OneToMany को एक तरफ छोड़ सकते हैं।

यदि मैं अब @OneToMany एनोटेटेड विशेषता को छोड़ने का डिज़ाइन निर्णय लेता हूं, तो मुझे और नीचे काटने के लिए वापस आ जाएगा।

नहीं, और यदि आप पाते हैं कि आपको इसकी आवश्यकता है तो आप इसे बाद में जोड़ सकते हैं।

+0

+1 और @ पास्कल थिवेंट की जांच करें: इंगित करने के लिए अगर मुझे इसकी आवश्यकता हो तो मैं इसे बाद में जोड़ सकता हूं: यह मेरी मुख्य चिंता थी। – bguiz

+0

मैं आमतौर पर जितना संभव हो सके unidirectional मैपिंग से बचने की कोशिश करता हूं। सिर्फ इसलिए कि डेटबेस में कुछ अलग तालिका में (किसी भी कारण से) के साथ मॉडलिंग किया गया है इसका मतलब यह नहीं है कि मेरे ऑब्जेक्ट-मॉडल को ऐसा करना है। उपर्युक्त उदाहरण में, एक वन -ऑन-मैपिंग यूनी-दिशात्मक समाधान के लिए पर्याप्त होगा (बेशक इसे डोमेन का पालन करना होगा)। – lostiniceland

2

वे वैकल्पिक हैं। यदि आप उनका उपयोग नहीं करना चाहते हैं तो उन्हें अपने मॉडल में जोड़ने की कोई आवश्यकता नहीं है।

मैं रिवर्स मैपिंग से बचने के लिए सुझाव दूंगा क्योंकि इस तरह के संग्रह काफी बड़े हो सकते हैं और अधिकांश दृढ़ परतें इन्हें बहुत अच्छी तरह से संभाल नहीं देती हैं। कई मामलों में आपको इन संग्रहों से संबंधित पहले से लोड/प्रबंधित इकाइयों के जोड़ने/निकालने का निपटारा करना होगा। तो केवल उनको जोड़ें यदि वे वास्तव में आपके लिए चीजों को आसान बनाते हैं।

+0

+1 @ डैनियल ब्लीस्टीनर: उन्हें संभालने के लिए आवश्यक कोड की भारी मात्रा काफी कमजोर हो सकती है। सलाह के लिए धन्यवाद – bguiz

संबंधित मुद्दे