जावा में transient
कीवर्ड है। जेपीए के पास पहले से ही मौजूदा जावा कीवर्ड का उपयोग करने के बजाय @Transient
क्यों है? जबकि जेपीए के @Transient
एनोटेशन दर्शाता है कि एक क्षेत्र नहीं है डेटाबेस में कायम किया जाना है, अर्थात उनके अर्थ विज्ञान अलग हैं प्रयोग किया जाता हैजेपीए में @ ट्रांसिएंट एनोटेशन क्यों है?
उत्तर
जावा के transient
कीवर्ड, निरूपित करने के लिए है कि एक क्षेत्र धारावाहिक जा नहीं है प्रयोग किया जाता है।
क्योंकि उनके पास अलग-अलग अर्थ हैं। @Transient
एनोटेशन जेपीए प्रदाता को किसी भी (गैर- transient
) विशेषता को जारी रखने के लिए कहता है। दूसरा एक विशेषता को क्रमबद्ध करने के लिए धारावाहिक ढांचे को बताता है। आप @Transient
संपत्ति चाहते हैं और अभी भी इसे क्रमबद्ध कर सकते हैं।
जैसा कि अन्य ने कहा है, @Transient
उन क्षेत्रों को चिह्नित करने के लिए उपयोग किया जाता है जिन्हें जारी नहीं रखा जाना चाहिए। इस छोटे से उदाहरण पर विचार करें:
public enum Gender { MALE, FEMALE, UNKNOWN }
@Entity
public Person {
private Gender g;
private long id;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public long getId() { return id; }
public void setId(long id) { this.id = id; }
public Gender getGender() { return g; }
public void setGender(Gender g) { this.g = g; }
@Transient
public boolean isMale() {
return Gender.MALE.equals(g);
}
@Transient
public boolean isFemale() {
return Gender.FEMALE.equals(g);
}
}
जब इस वर्ग जेपीए को खिलाया जाता है, यह बनी रहती है gender
और id
लेकिन सहायक बूलियन तरीकों बने रहने की कोशिश नहीं करता है - अंतर्निहित प्रणाली शिकायत करेगा @Transient
बिना कि इकाई वर्ग Person
setMale()
और setFemale()
विधियों की अनुपलब्ध है और इस प्रकार Person
पर भी जारी नहीं रहेगा।
तुम सिर्फ चाहते हैं एक क्षेत्र कायम नहीं किया जाएगा, दोनों क्षणिक और @Transient काम करते हैं। लेकिन सवाल यह है कि @ ट्रांसिएंटक्षणिक पहले से मौजूद है।
क्योंकि @ ट्रांसिएंट फ़ील्ड अभी भी क्रमबद्ध हो जाएगा!
मान लीजिए कि आप एक इकाई बनाते हैं, परिणाम प्राप्त करने के लिए कुछ CPU उपभोग करने वाली गणना करते हैं और यह परिणाम डेटाबेस में सहेज नहीं पाएगा। लेकिन आप जेएमएस द्वारा उपयोग करने के लिए इकाई को अन्य जावा अनुप्रयोगों में भेजना चाहते हैं, तो आपको @Transient
का उपयोग करना चाहिए, जावाएसई कीवर्ड transient
नहीं। तो अन्य वीएम पर चल रहे रिसीवर अपने समय को फिर से गणना करने के लिए बचा सकते हैं।
क्या आप इसे और स्पष्ट करने के लिए उदाहरण प्रदान कर सकते हैं? –
मैं "क्यों" के प्रश्न का उत्तर देने का प्रयास करूंगा। ऐसी परिस्थिति की कल्पना करें जहां आपके पास एक तालिका में बहुत सारे कॉलम के साथ एक विशाल डेटाबेस है, और आपका प्रोजेक्ट/सिस्टम डेटाबेस से इकाइयों को उत्पन्न करने के लिए टूल का उपयोग करता है। (हाइबरनेट में उन, आदि हैं ...) अब, मान लीजिए कि आपके व्यवसाय तर्क से आपको एक विशेष क्षेत्र की आवश्यकता है, न कि बने रहें। आपको अपनी इकाई को किसी विशेष तरीके से "कॉन्फ़िगर" करना होगा। जबकि क्षणिक कीवर्ड किसी ऑब्जेक्ट पर काम करता है - क्योंकि यह जावा भाषा में व्यवहार करता है, तो @ ट्रांसिएंट केवल उन कार्यों का उत्तर देने के लिए डिज़ाइन किया गया है जो केवल दृढ़ता कार्यों से संबंधित हैं।
उद्देश्य अलग है:
transient
कीवर्ड और @Transient
एनोटेशन दो अलग-अलग उद्देश्य होते हैं: क्रमबद्धता के साथ एक सौदे और हठ के साथ एक से संबंधित है। प्रोग्रामर के रूप में, हम अक्सर इन दो अवधारणाओं को एक में शादी करते हैं, लेकिन यह सामान्य रूप से सटीक नहीं है। Persistence उस राज्य की विशेषता को संदर्भित करता है जो इसे बनाने वाली प्रक्रिया को आगे बढ़ाता है।जावा में Serialization किसी ऑब्जेक्ट के राज्य को एन्कोडिंग/डीकोडिंग की प्रक्रिया को बाइट स्ट्रीम के रूप में संदर्भित करता है।
एक क्षेत्र transient
कीवर्ड का उपयोग करता है, तो उस क्षेत्र जब वस्तु एक बाइट धारा में बदल जाती है धारावाहिक नहीं किया जाएगा:
transient
कीवर्ड @Transient
तुलना में मजबूत स्थिति है। इसके अलावा, चूंकि जेपीए transient
कीवर्ड के साथ @Transient
एनोटेशन के रूप में चिह्नित फ़ील्ड का इलाज करता है, इसलिए क्षेत्र जेपीए द्वारा जारी नहीं रखा जाएगा।
दूसरी ओर, क्षेत्रों अकेले @Transient
एनोटेट होगा एक बाइट धारा में परिवर्तित हो जब वस्तु धारावाहिक है, लेकिन यह जेपीए से कायम नहीं किया जाएगा। इसलिए, transient
कीवर्ड @Transient
एनोटेशन की तुलना में एक मजबूत स्थिति है।
उदाहरण
यह सवाल भीख माँगता: क्यों किसी को भी एक क्षेत्र है कि आवेदन के डेटाबेस के लिए कायम नहीं कर रहा है क्रमानुसार करने चाहेगा? वास्तविकता यह है कि क्रमबद्धता केवल से अधिक के लिए उपयोग की जाती है। एंटरप्राइज़ जावा एप्लिकेशन में वितरित घटकों के बीच ऑब्जेक्ट्स का आदान-प्रदान करने के लिए एक तंत्र होना आवश्यक है; serialization इसे संभालने के लिए एक आम संचार प्रोटोकॉल प्रदान करता है। इस प्रकार, एक क्षेत्र अंतर-घटक संचार के उद्देश्य के लिए महत्वपूर्ण जानकारी रख सकता है; लेकिन उसी क्षेत्र में दृढ़ता परिप्रेक्ष्य से कोई मूल्य नहीं हो सकता है।
उदाहरण के लिए, मान लें कि एक अनुकूलन एल्गोरिदम सर्वर पर चलाया जाता है, और मान लीजिए कि इस एल्गोरिदम को पूरा होने में कई घंटे लगते हैं। एक ग्राहक के लिए, समाधान का सबसे अद्यतित सेट होना महत्वपूर्ण है। इसलिए, एक ग्राहक सर्वर की सदस्यता ले सकता है और एल्गोरिदम के निष्पादन चरण के दौरान आवधिक अद्यतन प्राप्त कर सकता है। ये अद्यतन ProgressReport
वस्तु का उपयोग कर प्रदान की जाती हैं:
@Entity
public class ProgressReport implements Serializable{
private static final long serialVersionUID = 1L;
@Transient
long estimatedMinutesRemaining;
String statusMessage;
Solution currentBestSolution;
}
Solution
वर्ग इस प्रकार दिखाई देंगे:
@Entity
public class Solution implements Serializable{
private static final long serialVersionUID = 1L;
double[][] dataArray;
Properties properties;
}
सर्वर अपने डेटाबेस के लिए प्रत्येक ProgressReport
बनी हुई है। सर्वर estimatedMinutesRemaining
को जारी रखने की परवाह नहीं करता है, लेकिन ग्राहक निश्चित रूप से इस जानकारी की परवाह करता है। इसलिए, estimatedMinutesRemaining
@Transient
का उपयोग करके एनोटेट किया गया है। जब अंतिम Solution
एल्गोरिदम द्वारा स्थित होता है, तो यह ProgressReport
का उपयोग किये बिना सीधे जेपीए द्वारा जारी रहता है।
यदि वे वास्तव में अलग-अलग चिंताओं हैं, निश्चित रूप से एक अलग शब्द मौजूद है जो बारीकियों को पकड़ता है। शब्द अधिभार क्यों करें? स्टार्टर सुझाव के रूप में, '@ अप्रत्याशित'। –
मुझे व्यक्तिगत रूप से '@ एफेमेरल' पसंद है। मरियम वेबस्टर के अनुसार: जब 1600 के दशक में पहली बार अंग्रेजी में मुद्रित किया गया था, "यह अल्पकालिक बुखारों के लिए एक वैज्ञानिक शब्द था, और बाद में, बहुत कम जीवन काल के साथ जीवों (जैसे कि कीड़े और फूल) के लिए लागू किया गया था। इसके तुरंत बाद , यह किसी भी क्षणिक और अल्पकालिक (जैसा कि "क्षणिक सुख" में) के संदर्भ में एक विस्तारित अर्थ प्राप्त हुआ। " –
बहुत अच्छी व्याख्या! – GOXR3PLUS
- 1. जेपीए एनोटेशन
- 2. एंड्रॉइड में जेपीए एनोटेशन
- 3. उलटा = जेपीए एनोटेशन में सत्य
- 4. कैसे हाइबरनेट/जेपीए एनोटेशन
- 5. जावा - जेपीए - @ वर्जन एनोटेशन
- 6. जेपीए + हाइबरनेट + @ ट्रांज़ेक्शनल एनोटेशन
- 7. जेपीए: विदेशी कुंजी एनोटेशन
- 8. @IdClass जेपीए एनोटेशन
- 9. जेपीए कैस्केड एनोटेशन और हाइबरनेट कैस्केड एनोटेशन
- 10. जावा - जेपीए @ बासिक और @ एम्बेडेड एनोटेशन
- 11. जावा में @Implements एनोटेशन क्यों नहीं है?
- 12. जेपीए 2.0 @OrderColumn एनोटेशन हाइबरनेट 3.5
- 13. कठोर समय सेटिंग हाइबरनेट जेपीए एनोटेशन
- 14. जेपीए एनोटेशन पर जादू संख्या सोनार उल्लंघन
- 15. मल्टी-कॉलम हाइबरनेट/जेपीए एनोटेशन में शामिल हों
- 16. जेपीए में आशावादी ताला क्या है?
- 17. जावा एनोटेशन क्यों?
- 18. जेपीए
- 19. जेपीए में इकाई वर्ग क्यों अंतिम नहीं हो सकता है?
- 20. जेपीए
- 21. जावा में एनोटेशन का विस्तार करना क्यों संभव नहीं है?
- 22. मानचित्र जेपीए के साथ स्ट्रिंग की एक सूची/एनोटेशन हाइबरनेट
- 23. जेपीए एनोटेशन के साथ बहु-स्तंभ बाधा कैसे पेश करें?
- 24. हाइबरनेट जेपीए एनोटेशन: एंबेडेड आईडी के साथ समस्या
- 25. जेपीए createNamedQuery
- 26. जेपीए @ टटेबल एनोटेशन "कैटलॉग" और "स्कीमा" चर के लिए क्या उपयोग किया जाता है?
- 27. जेपीए
- 28. जेपीए
- 29. जेपीए
- 30. जेपीए
हां, अर्थशास्त्र अलग हैं। लेकिन जेपीए इस तरह से डिजाइन क्यों किया गया था? –
यकीन नहीं है कि मैं आपको समझ रहा हूं, लेकिन "पास्कल थिवेंट" के उत्तर पर एक नज़र डालें;) – Jawher
यह आसान है क्योंकि आप डेटाबेस में डेटा स्टोर नहीं करना चाहते हैं, लेकिन आप इसे जेपीए में स्टोर करना चाहते हैं चैचिंग सिस्टम जो इकाइयों की दुकान/बहाली के लिए क्रमबद्धता का उपयोग करता है। – Kdeveloper