मुझे लगता @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
से हमें एक रास्ता मिल जाएगा।