मौलिक प्रश्न: @Embedded ऑब्जेक्ट्स हमेशा तत्काल क्यों नहीं हैं?@ एम्बेडेड ऑब्जेक्ट स्वचालित रूप से तत्काल नहीं होता है यदि उसके पास कोई मूल डेटाटाइप फ़ील्ड नहीं है
दिलचस्प अवलोकन यह है कि यदि ईबेन मूल डेटाटाइप (int, बूलियन ...) नहीं है या पहले स्पर्श नहीं किया गया है तो ईबेन @ एम्बेडेड ऑब्जेक्ट्स को तुरंत चालू नहीं करता है। उदाहरण:
@Entity
public class Embedder {
// getNotAutoInstantiated() will return null if this field was not touched before
@Embedded
private NotAutoInstantiated notAutoInstantiated = new NotAutoInstantiated();
// getAutoInstantiated() will always return an instance!
@Embedded
private AutoInstantiated autoInstantiated = new AutoInstantiated();
}
@Embeddable
public class AutoInstantiated {
// theKey is why this embedded object is always instantiated
private int theKey;
private String field1;
}
@Embeddable
public class NotAutoInstantiated {
private String field2;
}
आपको एकाधिक एम्बेडेड ऑब्जेक्ट्स के बीच फील्ड नाम टकराव के साथ समस्या हो सकती है। आम तौर पर, जेपीए प्रदाता एम्बेडेड ऑब्जेक्ट फ़ील्ड को मूल तालिका में कॉलम पर मानचित्र करता है। यदि एम्बेडेड फ़ील्ड नाम लंबे समय तक चलते हैं, तो आप डेटाबेस में छंटनी वाले फ़ील्ड नामों और कॉलम नामों में टकराव के साथ समाप्त हो सकते हैं। – Zagrev
उदाहरण धोखा दे सकता है। मेरे कोड में नाम बहुत कम हैं और वे उसी उपसर्ग से शुरू नहीं होते हैं। लेकिन यहां तक कि उदाहरण में फ़ील्ड "नहीं" और "ऑटो" से शुरू होते हैं, इसलिए छंटनी एक बड़ी समस्या नहीं होगी। – allprog
वास्तव में, मैं "फ़ील्ड" और "फ़ील्ड" के बारे में सोच रहा था। – Zagrev