2011-12-16 18 views
5

EntityManager.persist() के लिए प्रलेखन का कहना है कि यह होगा।EntityManager.contains() जारी रखने के बाद झूठी रिटर्न()

यह डेटाबेस को इकाई को बनाए रखता है, लेकिन जब मैं EntityManager.contains() विधि को यह जांचने के लिए कहता हूं कि जिस इकाई को मैंने अभी जारी रखा है, वह प्रबंधित है false

मैं सिर्फ यह जानना चाहता हूं कि ऐसा क्यों होता है? हो सकता है कि कुछ ऐसा हो जो मैं करने में सक्षम नहीं था या जिसे मैंने अनदेखा किया था?

सुझावों की सराहना की जाएगी: डी

+1

क्या आप अपना कोड पोस्ट कर सकते हैं जिसमें आप एंटीटी मैनेजर की सामग्री को जारी रखते हैं और पढ़ते हैं? –

उत्तर

3

यह वास्तव में अजीब है। अनुसार Sun EJB3 spec:

विधि निर्धारित करने के लिए एक इकाई उदाहरण वर्तमान हठ संदर्भ में किया जाता है कि क्या किया जा सकता है।

contains विधि सच रिटर्न: इकाई डेटाबेस से लिया जा चुका है

  • हैं, और नहीं निकाला गया है या अलग।
  • यदि इकाई का उदाहरण नया है, और persist इकाई पर विधि को बुलाया गया है या लगातार ऑपरेशन को कैस्केड किया गया है।

contains विधि झूठे रिटर्न:

  • तो उदाहरण अलग है।
  • यदि remove इकाई पर विधि कहा गया है, या निकालने के ऑपरेशन को इसके लिए कैस्केड किया गया है।
  • यदि उदाहरण नया है, और persist विधि को विधि पर नहीं कहा गया है या लगातार ऑपरेशन को पर कैस्केड नहीं किया गया है।

ध्यान दें कि जारी रहती है की व्यापक के प्रभाव या निकालने के लिए, विधि शामिल करने के लिए तुरंत दिखाई दे रहा है, जबकि वास्तविक प्रविष्टि या संस्था के लिए डेटाबेस प्रतिनिधित्व का विलोपन लेन-देन के अंत तक स्थगित कर किया जा सकता है ।

क्या आप उसी लेनदेन में contains पर कॉल कर रहे हैं?

+0

मुझे विश्वास है कि मैं एक ही लेनदेन में हूं लेकिन मुझे सच में यकीन नहीं है क्योंकि मैं परिभाषित नहीं कर रहा हूं कि लेनदेन कहाँ शुरू होना चाहिए और प्रतिबद्ध करना क्योंकि मैंने इसे कंटेनर में छोड़ दिया था। लेकिन मुझे लगता है कि मुझे प्राथमिक इकाई क्यों नहीं मिल रही है क्योंकि प्राथमिक कुंजी है। प्राथमिक कुंजी में से एक डेटाबेस से आना चाहिए और मैं इसे पुनर्प्राप्त नहीं कर सकता। वैसे भी, मैं इसे पूरा करने के लिए बस एक अलग दृष्टिकोण की कोशिश करूंगा। हालांकि जानकारी के लिए धन्यवाद: डी –

0

हमने कुछ कामकाज किया, बजाय> ताज़ा करने के बजाय, हमने डेटास्टोर से स्वत: जेनरेट की गई कुंजी ली और इसे मैन्युअल रूप से इकाई के मुख्य क्षेत्रों में असाइन किया और फिर इसे जारी रखा।