2011-11-28 16 views
6

के लिए एक शून्य पीके का एक गलत उदाहरण गलत तरीके से प्रदान किया गया है, मैं जेएसएफ 2.0 और जेपीए पर एक ट्यूटोरियल का पालन करने के लिए नेटबीन्स 7.01 का उपयोग करने की कोशिश कर रहा हूं। मैं ओरेकल एक्सई और जेडीबीसी_6 का उपयोग कर रहा हूं। मैंने जेएसएफ पृष्ठों को जेएसएफ पृष्ठों को जेएसएफ पेज जेनरेट करने के लिए इस्तेमाल किया। सब कुछ ठीक काम करता है क्योंकि मैं डेटाबेस से डेटा को पुनः प्राप्त कर सकता हूं और उन्हें प्रदर्शित कर सकता हूं। लेकिन जब मैं बना सकते हैं या डेटाबेस में एक रिकॉर्ड अद्यतन करने का प्रयास है, मैं इस त्रुटि मिलती है:दृढ़ता त्रुटि संदेश: खोज ऑपरेशन

An instance of a null PK has been incorrectly provided for the find operation

यह कैसे के कारण होता है और मैं इसे कैसे हल कर सकते हैं?

+0

कौन सा शून्य पीके "ढूंढने" में पास हुआ है, क्या आप समझ नहीं पाए? (और इसके साथ तुलना करें कि आप वास्तव में em.find विधि में क्या करते हैं)। – DataNucleus

उत्तर

9

यह मूलतः इसका मतलब है कि आप निम्नलिखित किया:

Entity entity = em.find(Entity.class, null); 

ध्यान दें कि पी null यहाँ है। अपनी समस्या को ठीक करने के लिए, बस सुनिश्चित करें कि यह null है।

4

ऐसा इसलिए हो सकता है क्योंकि आप ऐसी इकाई पर एक खोज ऑपरेशन चला रहे हैं जो अभी तक जारी नहीं है। किस स्थिति में, @ID फ़ील्ड (यदि यह स्वत: उत्पन्न होता है), तो कोई मूल्य नहीं होगा, यानी। यह शून्य हो जाएगा। फिर आप इकाई को खोजने की कोशिश कर रहे हैं, और @ बाल्लूसी बताते हैं, आप अपनी खोज विधि में एक शून्य मान भेज रहे हैं।

2

इसका मतलब है कि जब आप किसी इकाई को बनाए रखने की कोशिश कर रहे हैं तो आप इकाई के पीके को शून्य के रूप में भेज रहे हैं।

  • मैन्युअल परिभाषित इकाई के लिए पी:

    तो तुम तीन विकल्प हैं।

  • यदि आपका डेटाबेस सीरियल (इनफॉर्मिक्स, एमएस एसक्यूएलएसईआरईआर, इत्यादि) जैसे प्रकार का उपयोग करता है तो मूल्य आरडीएमएस द्वारा स्वत: संक्रमित करके आप पहचान रणनीति का उपयोग कर सकते हैं, इसलिए अब आप अपनी इकाई के पीके के लिए शून्य मान पास कर सकते हैं।

    @Entity 
    public class Inventory implements Serializable { 
         @Id 
         @GeneratedValue(strategy=GenerationType.IDENTITY) 
         private long id; 
    
  • अपने डेटाबेस एक दृश्यों का उपयोग करता है के लिए पीकेएस (Oracle, Postgresql, आदि) तो मूल्य ताकि आप उपयोग कर सकते हैं एक दृश्य द्वारा प्रदान की जा उत्पन्न:

    @Entity 
    public class Inventory implements Serializable { 
        @Id 
        @GeneratedValue(generator="InvSeq") 
        @SequenceGenerator(name="InvSeq",sequenceName="INV_SEQ", allocationSize=5) 
        private long id; 
    

अधिक जानकारी के लिए आप देख सकते हैं: http://wiki.eclipse.org/EclipseLink/Examples/JPA/PrimaryKey

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