निम्नलिखित वर्ग संरचना को देखते हुए:क्या मैं स्प्रिंग डेटा जेपीए के साथ मैप्डसुपर क्लास के सभी बच्चों के लिए एक सामान्य रिपोजिटरी का उपयोग कर सकता हूं?
@MappedSuperclass
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Animal {}
@Entity
public class Dog {}
@Entity
public class Cat {}
साथ स्प्रिंग डाटा जेपीए, यह जानने के Animal
किस तरह यह है बिना रनटाइम पर एक Animal
लागू करने के लिए एक सामान्य Animal
भंडार का उपयोग करना संभव है?
मैं जानता हूँ कि मैं एक भंडार-प्रति-इकाई का उपयोग कर इसे करते हैं और instanceof
इस तरह का उपयोग करके कर सकते हैं:
if (thisAnimal instanceof Dog)
dogRepository.save(thisAnimal);
else if (thisAnimal instanceof Cat)
catRepository.save(thisAnimal);
}
लेकिन मैं instanceof
का उपयोग कर के खराब व्यवहार का सहारा नहीं करना चाहती।
मैं इस तरह एक सामान्य रिपोजिटरी के प्रयोग की कोशिश की है:
public interface AnimalRepository extends JpaRepository<Animal, Long> {}
लेकिन यह इस अपवाद में परिणाम: Not an managed type: class Animal
। मैं अनुमान लगा रहा हूं क्योंकि Animal
Entity
नहीं है, यह MappedSuperclass
है।
सबसे अच्छा समाधान क्या है?
बीटीडब्ल्यू - Animal
persistence.xml
में मेरी कक्षाओं के बाकी हिस्सों के साथ सूचीबद्ध है, इसलिए यह समस्या नहीं है।
'persistence.xml' में मेरी दृढ़ता इकाई में' पशु 'को कक्षा के रूप में सूचीबद्ध किया जाना चाहिए? आपके सुझाए गए बदलाव ने एक नया अपवाद पैदा कर रहा है: 'EntityManagerFactory' बनाने में असमर्थ। –
@CFL_Jeff: आमतौर पर मैं केवल एनोटेशन पर भरोसा करता हूं, इसलिए मुझे यकीन नहीं है। क्या आप कहीं भी 'स्टॉस्ड' सहित पूर्ण स्टैक ट्रेस प्रकाशित कर सकते हैं? –
ऐसा लगता है कि मुझे इसके अलावा अन्य समस्याएं भी हैं। मेरा मानना है कि आपने इस मुद्दे को हल करने में मेरी मदद की है, और मैं नई समस्याओं पर काम करूंगा। धन्यवाद! –