मुझे लगता @EmbeddedIdहै कि संभवतः अधिक क्रिया है क्योंकि @IdClassआप किसी भी क्षेत्र एक्सेस ऑपरेटर का उपयोग करके पूरे प्राथमिक कुंजी ऑब्जेक्ट तक नहीं पहुंच सकते हैं। @EmbeddedIdआप इस तरह का उपयोग कर सकते हैं:
@Embeddable class EmployeeId { name, dataOfBirth }
@Entity class Employee {
@EmbeddedId EmployeeId employeeId;
...
}
यह उन क्षेत्रों की स्पष्ट धारणा देता है जो समग्र कुंजी बनाते हैं क्योंकि वे सभी एक वर्ग में एकत्रित होते हैं जो एक फ़ील्ड एक्सेस ऑपरेटर को गर्त में पहुँचाता है।
साथ एक और अंतर यह @IdClassऔर @EmbeddedIdजब यह HQL लिखने के लिए आता है:
साथ @IdClassआप लिखते हैं:
कर्मचारी ई से e.name चुनें
और @EmbeddedIdआपको लिखना होगा:
कर्मचारी ई से e.employeeId.name चुनें
आपको एक ही क्वेरी के लिए अधिक पाठ लिखना होगा। कुछ लोग यह तर्क दे सकते हैं कि यह एक अधिक प्राकृतिक भाषा से भिन्न है जैसे कि एक प्रचारित IdClass। लेकिन अधिकांश बार क्वेरी से सही समझ लेना कि किसी दिए गए क्षेत्र को समग्र कुंजी का हिस्सा है अमूल्य मदद है।
@IdClassभी जोड़ना चाहूंगा, भले ही मैं@EmbeddedIdज्यादातर स्थितियों में पसंद करता हूं (एंटोनियो गोनक्लेव द्वारा एक सत्र से यह जानना है। उन्होंने जो सुझाव दिया था कि हम@IdClassसमग्र मामले में उपयोग कर सकते हैं। कुंजी वर्ग सुलभ नहीं है या किसी अन्य मॉड्यूल या विरासत कोड से आता है जहां हम एक एनोटेशन नहीं जोड़ सकते हैं। उन परिदृश्यों@IdClassसे हमें एक रास्ता मिल जाएगा।