2013-01-11 5 views
7

निम्नलिखित वर्ग संरचना को देखते हुए:क्या मैं स्प्रिंग डेटा जेपीए के साथ मैप्डसुपर क्लास के सभी बच्चों के लिए एक सामान्य रिपोजिटरी का उपयोग कर सकता हूं?

@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। मैं अनुमान लगा रहा हूं क्योंकि AnimalEntity नहीं है, यह MappedSuperclass है।

सबसे अच्छा समाधान क्या है?

बीटीडब्ल्यू - Animalpersistence.xml में मेरी कक्षाओं के बाकी हिस्सों के साथ सूचीबद्ध है, इसलिए यह समस्या नहीं है।

उत्तर

4

वास्तव में समस्या आपके मैपिंग के साथ है। आप या तो @MappedSuperclassया@Inheritance का उपयोग करें। दोनों एक साथ समझ में नहीं आता है। अपनी इकाई को इस पर बदलें:

@Entity 
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) 
public abstract class Animal {} 

चिंता न करें, अंतर्निहित डेटाबेस योजना समान है। अब एक, सामान्य AnimalRepository काम करेगा। हाइबरनेट आत्मनिरीक्षण करेगा और वास्तविक उपप्रकार के लिए उपयोग करने के लिए कौन सी तालिका का उपयोग करेगा।

+0

'persistence.xml' में मेरी दृढ़ता इकाई में' पशु 'को कक्षा के रूप में सूचीबद्ध किया जाना चाहिए? आपके सुझाए गए बदलाव ने एक नया अपवाद पैदा कर रहा है: 'EntityManagerFactory' बनाने में असमर्थ। –

+0

@CFL_Jeff: आमतौर पर मैं केवल एनोटेशन पर भरोसा करता हूं, इसलिए मुझे यकीन नहीं है। क्या आप कहीं भी 'स्टॉस्ड' सहित पूर्ण स्टैक ट्रेस प्रकाशित कर सकते हैं? –

+0

ऐसा लगता है कि मुझे इसके अलावा अन्य समस्याएं भी हैं। मेरा मानना ​​है कि आपने इस मुद्दे को हल करने में मेरी मदद की है, और मैं नई समस्याओं पर काम करूंगा। धन्यवाद! –

संबंधित मुद्दे

 संबंधित मुद्दे