समस्या
से MappedSuperclass का चयन मैं एक @MappedSuperclass
डाटा मेरी डेटाबेस में हर इकाई के माता पिता के रूप कहा जाता है। इसमें आईडी आदि जैसे सामान्य गुण शामिल हैं। उसके बाद एक ऐसी इकाई है जो डेटा को बढ़ाती है जो इसके उप-वर्गों की सामान्य कार्यक्षमता के कारण @MappedSuperclass
भी है। मेरे डेटाबेस में मैपिंग सही है।डेटाबेस (हाइबरनेट)
यहाँ मेरी पदानुक्रम
@MappedSuperclass Data | @MappedSuperclass +- Employee | | @Entity | +- FullTimeEmployee | | @Entity | +- PartTimeEmployee | @Entity +- Store
का एक उदाहरण है और टेबल सही ढंग से मैप की जाती हैं:
FullTimeEmployee PartTimeEmployee Store
वहाँ वैसे भी सभी कर्मचारी उपवर्गों (FullTimeEmployee, PartTimeEmployee) उदाहरणों के रूप में के लिए डेटाबेस क्वेरी करने के लिए है क्वेरी में उप-वर्गों के नाम का जिक्र किए बिना कर्मचारी का?
कुछ
तरहList<Employee> allEmployees = getAllEmployees();
विचार मैं क्वेरी को बदलने के लिए नाम शामिल करने के लिए नहीं होगा जब भी मैं कर्मचारी (अर्थात AllDayEmployee) का एक और उपवर्ग बनाने का निर्णय लेते हैं।
समाधान
तो, के रूप में Gregory सही ढंग से कहा, यह संभव @MappedSuperclass
के साथ है। इसलिए मैंने इसे @Entity में बदल दिया और, क्योंकि मैं प्रत्येक सबक्लास के लिए एक टेबल को संरक्षित करना चाहता था, मैंने InheritanceType.JOINED
का उपयोग किया था।
तो ऊपर पदानुक्रम अब
@MappedSuperclass Data | @Entity | @Inheritance(strategy=InheritanceType.JOINED) +- Employee | | @Entity | +- FullTimeEmployee | | @Entity | +- PartTimeEmployee | @Entity +- Store
है और टेबल अभी भी कर रहे हैं: सभी कर्मचारियों को पाने के लिए तो अब
FullTimeEmployee PartTimeEmployee Store
, मैं बस फोन:
entityManager.createQuery("from Employee").getResultList();
क्या होगा यदि मैं FullTimeEmployee और PartTimeEmployee (मैं ओरेकल उपयोग कर रहा हूँ के लिए दो अलग-अलग '@ SequenceGenerator' की जरूरत दृश्यों)? एक संस्था होने के नाते मुझे कर्मचारी वर्ग पर '@ आईडी' निर्दिष्ट करना होगा। – drakyoko