2010-07-05 14 views
10

मेरे पास प्राथमिक कुंजी के बिना एक MySQL तालिका है, और मुझे इसे एक जेपीए इकाई में मैप करना होगा। मैं किसी भी तरह से तालिका को संशोधित नहीं कर सकता।प्राथमिक कुंजी के बिना किसी तालिका के लिए जेपीए इकाई

क्योंकि संस्थाओं में प्राथमिक कुंजी होनी चाहिए, मुझे एक निर्दिष्ट करना होगा। यदि मुझे यकीन है कि जो इकाई मैं इकाई में प्राथमिक कुंजी के रूप में उपयोग करता हूं (या फ़ील्ड्स, क्या मुझे समग्र प्राथमिक कुंजी का उपयोग करने का विकल्प चुनना चाहिए) तालिका में हमेशा अद्वितीय (और शून्य नहीं) होगा, तथ्य यह है कि तालिका नहीं है किसी भी मुद्दे के कारण तालिका बनाने में निर्दिष्ट प्राथमिक कुंजी नहीं है?

उत्तर

8

यह सही है। जेपीए को यह जानने का कोई तरीका नहीं है कि पीके के रूप में उपयोग किए जाने वाले कॉलम वास्तव में डेटाबेस में वास्तविक पीके है या नहीं। यदि वे कॉलम, अभ्यास में, एक पीके हैं, तो यह ठीक होना चाहिए।

यदि आप छद्म-पीके कॉलम सही तरीके से अनुक्रमित नहीं हैं, तो आपको संभावित रूप से कुछ प्रदर्शन समस्याएं मिल सकती हैं, हालांकि - जेपीए पीके के खिलाफ प्रश्नों को निष्पादित करेगा कि यह अच्छी तरह से प्रदर्शन करेगा।

2

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

@Entity 
@Table(name = "login") 
@NamedQueries({ 
     @NamedQuery(name = "Login.updateLastOnline", 
     query = "UPDATE Login l SET l.lastOnline = :newDate WHERE l.loginId = :loginId") 
     }) 
public class Login implements Serializable 
{ 

इससे कोई फर्क नहीं पड़ता अगर LoginID प्राथमिक कुंजी

+0

क्यों खोजने के लिए और मर्ज कर सकते हैं कारण समस्याओं है? – tputkonen

+0

@tputkonen - हो सकता है कि मैं स्पष्ट रूप से लिख नहीं सकता हूं, लेकिन मैंने यह कहने की कोशिश की है कि आप जेपीक्यूएल का उपयोग कर उपयोग ढूंढ/विलय से बच सकते हैं। – Dewfy

+0

मैं इसके साथ सहमत हूं, यह सिर्फ इतना है कि हमने इस तरह के तालिकाओं के साथ विलय का उपयोग करते समय कुछ अजीब व्यवहार का अनुभव किया था, और – tputkonen

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