2009-03-13 6 views
27

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

+0

दृश्य काम करता है, लेकिन अगर आप विचारों जेपीए ORM मानचित्रण के साथ अच्छी तरह से फिट नहीं करता है आप के बजाय एक संग्रहीत प्रक्रिया का उपयोग कर सकते दृश्य (ओं) से गठित एक कस्टम कर्सर वापस जाने के लिए। आप @NamedStoredProcedureQuery एनोटेशन का उपयोग करके EclipseLink में संग्रहित प्रक्रियाओं को मानचित्रित कर सकते हैं। "ग्रहण लिंक एक्सटेंशन" के लिए इस Google पर अधिक जानकारी के लिए। –

उत्तर

7

जबकि सीधे समर्थित प्रकार के क्षेत्रों के साथ @Id एनोटेशन का उपयोग कर एक इकाई की पहचान निर्दिष्ट करने के लिए एकमात्र तरीका नहीं है (@Embedded के साथ कई @Id एनोटेशन के साथ @IdClass या @EmbeddedId देखें), जेपीए विनिर्देश प्रत्येक इकाई के लिए एक प्राथमिक कुंजी की आवश्यकता है।

उस ने कहा, आपको डेटाबेस दृश्यों के साथ जेपीए का उपयोग करने के लिए इकाइयों की आवश्यकता नहीं है। चूंकि एक दृश्य में मैपिंग एक एसक्यूएल परिप्रेक्ष्य से किसी तालिका में मैपिंग से अलग नहीं है, तो आप इसके बजाय स्केलर मानों को पुनर्प्राप्त करने के लिए मूल प्रश्नों (createNativeQueryEntityManager पर) का उपयोग कर सकते हैं।

0

मैं इसे स्वयं देख रहा हूं, और मुझे एक हैक मिला है कि मैं 100% निश्चित काम नहीं कर रहा हूं लेकिन यह आशाजनक दिखता है।

मेरे मामले में, मेरे पास एक एफके कॉलम है जो प्रभावी रूप से पीके के रूप में कार्य कर सकता है - उस विदेशी वस्तु का कोई भी उदाहरण केवल एक बार दृश्य में हो सकता है। मैंने उस क्षेत्र के दो ऑब्जेक्ट्स को परिभाषित किया है: एक को आईडी निर्दिष्ट किया गया है और क्षेत्र के कच्चे मूल्य का प्रतिनिधित्व करता है, और दूसरा केवल पढ़ने के लिए नामित किया जाता है और संदर्भित वस्तु का प्रतिनिधित्व करता है।


@Id 
@Column(name = "foreignid", unique = true, nullable = false) 
public Long getForeignId() { 
... 

@OneToOne 
@JoinColumn(name = "foreignid", insertable=false, updatable=false) 
public ForeignObject getForeignObject() { 
... 

जैसा कि मैंने कहा, मैं 100% इस एक (और मैं सिर्फ यह जवाब अगर यह पता चला है काम करने के लिए नहीं हटा देंगे) पर यकीन नहीं है, लेकिन यह एक प्रकार का क्रैश बिंदु पर पीछे मेरी कोड मिला है।

डुनो अगर यह आपकी विशिष्ट स्थिति पर लागू होता है, हालांकि। और एक शानदार मौका है कि 11 महीनों के बाद, अब आप परवाह नहीं है। :-) क्या है, "Necromancer" बैज सिर्फ खुद कमाई नहीं करता है ....

0

मेरे विचार में मेरे पास एक "अद्वितीय" आईडी है, इसलिए मैंने इसे इकाई आईडी के रूप में मैप किया। यह बहुत अच्छी तरह से काम करता है: सामान्य तालिकाओं के रूप में

@Entity 
@Table(name="table") 
@NamedQuery(name="Table.findAll", query="SELECT n FROM Table n") 
public class Table implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name="column_a") 
    private int columnA; 
संबंधित मुद्दे