@GeneratedValue प्रकार आईडी के साथ आप उस मान को पहले से नहीं जान सकते (वास्तव में इसे लिखने से पहले)। हालांकि एक बार जब आप अपना बीन जारी रखते हैं, तो आईडी फ़ील्ड उस बीन इंस्टेंस में पॉप्युलेट हो जाएगी और आप इसके लिए अतिरिक्त क्वेरी किए बिना इसे प्राप्त कर सकते हैं। दूसरे शब्दों में:
MyEntiry myEnt = new MyEntity(); //the id field is null now
entityManager.persist(myEnt);//the id field is populated in myEnt now
Long id = myEnt.getId();
साथ ही, इस पर निर्भर करते हुए कि आपका EntityManager
. कैसा है कॉन्फ़िगर किया गया है, इससे पहले कि आप उस आईडी को प्राप्त कर सकें, आपको पहले लेनदेन (मैन्युअल रूप से) करने की आवश्यकता हो सकती है।
टिप्पणी के अनुसार अपडेट करें
यदि आप इकाई को सहेजने और/या अपडेट करने से पहले उसे रोकना चाहते हैं और कुछ करना चाहते हैं, तो आप जेपीए लाइफसाइकिल श्रोताओं का उपयोग कर सकते हैं (यदि आप जेपीए संस्करण 2 का उपयोग कर रहे हैं):श्रोताओं और कॉलबैक का उपयोग करके जेपीए लाइफसाइकिल ईवेंट को संभालना।
मूल रूप से आप एक validate()
. बना सकते हैं अपने बीन में विधि, इसे @PrePersist
. के साथ एनोटेट करें और @PreUpdate
और इसमें सत्यापन करें (यदि कोड खाली है तो इसे आईडी के मान पर सेट करें)
प्रति दूसरी टिप्पणी अपडेट करें
हां, मैंने ईमानदारी से अभी इसके बारे में सोचा था:कि यदि आईडी स्वतः उत्पन्न हो जाती है, तो यह पूर्व-निरंतर घटना के बाद पॉप्युलेट हो सकती है, जैसे कि जब आपका पूर्व-निरंतर कोड निष्पादित होता है तब भी आप नहीं जानते कि आईडी क्या है (आप यह भी देख सकते हैं कि जिस उदाहरण में आप आईडी से लिंक करते हैं वह ऑटोजेनरेटेड नहीं है बल्कि मैन्युअल रूप से सेट है)। इस मामले में आप अपनी इकाई में एक बूलियन फ़ील्ड जोड़ सकते हैं (@Transient
के साथ एनोटेट किया गया है) इसलिए यह जारी नहीं रहेगा) जिसे isCodeEmpty
. कहा जाता है (जो विशेष रूप से प्रारंभ नहीं होने पर डिफ़ॉल्ट रूप से गलत है)। फिर अपने @PrePersist
. में एनोटेट विधि आप जांचते हैं कि कोड फ़ील्ड के लिए मान खाली है और यदि ऐसा है, तो बूलियन को सत्य पर सेट करें। फिर आप अपना setId(...)
इस तरह की विधि (आईडी फ़ील्ड सेट करने के अलावा) यह इस बूलियन की जांच करेगी, और यदि सही है तो आईडी फ़ील्ड के कोड फ़ील्ड का मान सेट करें:
public class YourEntity {
@Transient
private boolean isCodeEmpty;
public void setId(Whatever id) {
this.id = id;
if(isCodeEmpty) {
this.code = id;
//if necessary:
//this.isCodeEmpty = false;
}
}
@PrePersist
public void validate() {
if(code == null || code.isEmpty()) {
isCodeEmpty = true;
}
}
}