मैं asking and answering my own question हूं, लेकिन मुझे नहीं लगता कि मेरे पास सबसे अच्छा जवाब है। यदि आपके पास बेहतर है, तो कृपया इसे पोस्ट करें!जेपीए में @EmbeddedId के रूप में @ManyToOne विशेषता को एक समग्र प्राथमिक कुंजी कैसे बनाएं?
संबंधित प्रश्न:
- How to set a backreference from an @EmbeddedId in JPA
- hibernate mapping where embeddedid
- JPA Compound key with @EmbeddedId
मैं वर्ग है जो एक साधारण एकत्रीकरण संबंध में हैं की एक जोड़ी है (?): एक के किसी भी मामले दूसरे के कुछ उदाहरण हैं। स्वामित्व वर्ग के पास अपनी खुद की प्राथमिक कुंजी है, और स्वामित्व वाली कक्षा में इस वर्ग के लिए एक विदेशी विदेशी कुंजी के माध्यम से कई से एक है। मैं स्वामित्व वाली कक्षा में प्राथमिक कुंजी रखना चाहता हूं जिसमें विदेशी कुंजी और कुछ अतिरिक्त जानकारी शामिल है।
तर्क के लिए, चलो उन बारहमासी पसंदीदा, ऑर्डर और ऑर्डरलाइन का उपयोग करें।
-- 'order' may have been a poor choice of name, given that it's an SQL keyword!
create table Order_ (
orderId integer primary key
);
create table OrderLine (
orderId integer not null references Order_,
lineNo integer not null,
primary key (orderId, lineNo)
);
मैं जेपीए का उपयोग कर जावा में इस मैप करने के लिए करना चाहते हैं:
करें SQL कुछ इस तरह लग रहा है। आदेश छोटा है, और ऑर्डरलाइन को @IdClass के साथ संभाला जा सकता है। Here's the code for that - कोड काफी पारंपरिक है, और मुझे आशा है कि आप मेरी idiosyncrasies को माफ कर देंगे।
हालांकि, @IdClass का उपयोग करके एक आईडी क्लास लिखना शामिल है जो ऑर्डरलाइन में फ़ील्ड को डुप्लिकेट करता है। मैं उस डुप्लिकेशन से बचना चाहता हूं, इसलिए मैं इसके बजाय @EmbeddedId का उपयोग करना चाहता हूं।
हालांकि, यह करने के लिए एक अनुभवहीन प्रयास विफल रहता है:
@Embeddable
public class OrderLineKey {
@ManyToOne
private Order order;
private int lineNo;
}
OpenJPA एक @EmbeddedId के रूप में है कि के उपयोग को खारिज कर दिया। मैंने अन्य प्रदाताओं की कोशिश नहीं की है, लेकिन मैं उन्हें सफल होने की उम्मीद नहीं करूंगा, क्योंकि जेपीए विनिर्देश के लिए आवश्यक है कि आईडी कक्षा बनाने वाले फ़ील्ड बुनियादी हों, संबंध न हों।
तो, मैं क्या कर सकता हूं? मैं उस वर्ग को कैसे लिख सकता हूं जिसकी कुंजी में @ManyToOne संबंध है, लेकिन इसे @EmbeddedId के रूप में संभाला जाता है?
क्या होगा यदि आप जिस इकाई को संदर्भित करना चाहते हैं वह एक समग्र कुंजी है?क्या आप एम्बेडेड आईडी में एकाधिक कॉलम पर MapsId का उपयोग कर सकते हैं? –