छोड़कर "uni-दिशात्मक" एक तरफ पल के लिए, एक एक ग्राहक आदेश संबंध इस प्रकार मॉडल सकता है।
@Entity
public class Customer {
// ...
@Id @GeneratedValue
int id;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "customer")
Set<Order> orders;
// ...
}
@Entity
public class Order {
// ...
@ManyToOne(optional = false)
Customer customer;
// ...
}
यहां मैं मान रहा हूं कि प्रत्येक आदेश में बिल्कुल एक ग्राहक है। डेटाबेस में, ऑर्डर तालिका में ग्राहक तालिका के "आईडी" कॉलम के लिए एक विदेशी कुंजी वाला "ग्राहक_आईडी" कॉलम होगा। डीडीएल निम्नलिखित की तरह कुछ दिखता है।
CREATE TABLE Customer (
id INT NOT NULL,
...
PRIMARY KEY (id)
);
CREATE TABLE Order (
...
customer_id INT NOT NULL,
...
FOREIGN KEY (customer_id) REFERENCES Customer (id)
);
हालांकि ग्राहक वर्ग में ऑर्डर का संग्रह होता है, यह वास्तव में किसी भी तरह से डेटाबेस संरचना को प्रभावित नहीं करता है; यह ग्राहक से संबंधित आदेशों को पुनर्प्राप्त/प्रबंधित करने का एक सुविधाजनक तरीका है। उदाहरण के लिए, आप ग्राहक से "ऑर्डर" सदस्य को पूरी तरह से छोड़ सकते हैं और इसके बजाय इन रिकॉर्ड्स को लाने के लिए क्वेरी पर भरोसा कर सकते हैं।
जिस बिंदु को मैं बनाने की कोशिश कर रहा हूं वह यह है कि डेटाबेस के परिप्रेक्ष्य से, वास्तव में "यूनी-दिशात्मक" संबंध जैसी कोई चीज़ नहीं है। उदाहरण reverendgreen प्रदान की गई जावा कक्षाएं उत्पन्न करेगी जहां कोई ऑर्डर ऑब्जेक्ट से ग्राहक ऑब्जेक्ट प्राप्त करने के लिए प्रत्यक्ष तरीका नहीं है, लेकिन परिणामस्वरूप डेटाबेस संरचना समान होगी (कॉलम नामों में मामूली अंतर को अनदेखा कर सकती है)। आप हमेशा एक प्रश्न के माध्यम से दिए गए आदेश के लिए ग्राहक को पा सकते हैं।
स्रोत
2010-08-18 20:40:13
ध्यान दें कि जेपीए 1.0 ** ** ** ** बिना किसी 'JoinTable' के बिना unidirectional' OneToMany' रिश्ते का समर्थन करता है **। दूसरे शब्दों में, आप उपरोक्त टेबल मॉडल को एक unidirectional 'OneToMany' के साथ मैप नहीं कर सकते हैं और इस प्रकार यह आपके उत्तर को सटीक रूप से नहीं दिखाता है। –
पास्कल सही है। उपरोक्त उदाहरण केवल जेपीए 2.0 के लिए काम करता है। –
@ जॉइन कॉलम (नाम = "cust_id", संदर्भित कॉलमनाम = "owner_id") सही है? – uuidcode