मेरे पास ओरेकल एक्सई 10 जी, हाइबरनेट 3.5, जेपीए 2.0 के साथ एक सेटअप है। प्राथमिक कुंजी के साथ एक साधारण तालिका है, जो प्रविष्टि पर डेटाबेस ट्रिगर द्वारा उत्पन्न होती है। ट्रिगर एक अनुक्रम से मूल्य प्राप्त करता है। ट्रिगर/अनुक्रम निर्माण ओरेकल एक्सई द्वारा किया गया था।यदि ट्रिगर द्वारा मूल्य उत्पन्न होता है तो मैं आईडी कॉलम को कैसे एनोटेट कर सकता हूं?
वास्तविक प्रश्न यह है कि: EntityManager.persist के बाद मुझे अपनी इकाई में आईडी का वर्तमान मूल्य कैसे प्राप्त हो सकता है?
मैंने कोशिश की:
@Id
private long id;
-> आईडी 0
है;
@Id
@Generated(GenerationTime.ALWAYS)
@Column(insertable = false, updatable = false)
private long id;
-> आईडी 0
है;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
-> विफल रहता है क्योंकि हाइबरनेट सीधे अनुक्रम (जो मौजूद नहीं है) से पूछताछ करने का प्रयास कर रहा है।
आईडी पहले दो दृष्टिकोणों में डेटाबेस में उत्पन्न होते हैं, लेकिन मेरे पास मेरे ऑब्जेक्ट में मान नहीं है।
धन्यवाद, लेकिन: ट्रिगर चीज स्वचालित रूप से वृद्धिशील पीके मानों को उत्पन्न करने के लिए ओरेकल तरीका है। अगर मैं इससे छुटकारा पाता हूं, तो मैं डेटाबेस पर सीधे पूछताछ के साथ आसानी से पंक्तियों को सम्मिलित करने की संभावना खो देता हूं। और दूसरा, अगर मैं आपके सुझाव की तरह एनोटेट करता हूं, तो मैं यूनिट परीक्षणों के लिए आसानी से डर्बी पर स्विच नहीं कर सकता: (... मुझे जो चाहिए वह एक एनोटेशन है जो कहता है: "बस डीबी उत्पन्न हुआ है"। – Zeemee
इस बिंदु पर गुगल किया गया, और एक कर्सर परीक्षा के आधार पर, ऐसा प्रतीत होता है कि अन्य उपयोगकर्ताओं ने हाइबरनेट से ओरेकल अनुक्रमों को दोबारा शुरू करने में सफलता प्राप्त की है। यहां एक उदाहरण है: https://forum.hibernate.org/viewtopic.php?p=2442821। डर्बी मुद्दे पर, इकाई एक डीबी मंच के खिलाफ परीक्षण जो आपके परिनियोजन प्लेटफ़ॉर्म से अलग है, एक सर्वोत्तम अभ्यास नहीं है और यूनिट परीक्षण और रनटाइम व्यवहार के बीच असंगतता का कारण बन सकता है। – atrain
@Mmmmoth: जब तक कोई अन्य फ़ील्ड विशिष्ट रूप से पंक्ति की पहचान नहीं करता है, तो हाइबरनेट कैसे प्राप्त करेगा डेटाबेस से जेनरेट की गई आईडी, चूंकि अभी डाली गई पंक्ति की पहचान करने का एकमात्र तरीका इसकी आईडी है, जिसे यह नहीं पता है। संक्षेप में, आईडी प्राप्त करने के लिए आईडी की आवश्यकता है। आपका ट्रिगर वास्तव में एक बुरा विचार है –