2010-08-17 20 views
10

मैं वर्तमान में क्या एक बहुत ही सरल समस्या लगती है के साथ फंस कर रहा हूँ का उपयोग कर विभिन्न तालिकाओं के लिए एक वर्ग मैप करने के लिए है, लेकिन मैं तो बस के चारों ओर एक रास्ता खोजने के लिए प्रतीत नहीं कर सकते हैं:कैसे हाइबरनेट/जेपीए एनोटेशन

मेरे पास है 2 समान टेबल:

  1. tbl_creditcard_approved_txns
  2. tbl_creditcard_declined_txns

दोनों में खेतों IDEN हैं टिकल, और मेरे पास एक वर्ग है - Transaction जिसका उपयोग टेबल में सभी उपयुक्त फ़ील्ड का प्रतिनिधित्व करने के लिए किया जाता है।

मैं उपरोक्त वर्ग में दो अलग-अलग इकाइयों (प्रत्येक तालिका के लिए एक) को मैप करने की कोशिश कर रहा हूं। पुरानी दुनिया में, मैंने दो hbm.xml फाइलें बनाई हैं, प्रत्येक तालिका के लिए एक और उन्हें दोनों को Transaction पर मैप करें। इसके बाद मैं दृढ़ता के दौरान इकाई के नाम का उपयोग यह सुनिश्चित करने के लिए करता हूं कि परिस्थिति के आधार पर वस्तु सही तालिका में बनी रहती है।

मैं वर्तमान में इसे प्राप्त करने के लिए एनोटेशन का उपयोग करने की कोशिश कर रहा हूं लेकिन 2 इकाइयों को एकल कक्षा में मैप करने में अब तक कोई भाग्य नहीं है। क्या यह वास्तव में संभव है?

मैं वर्तमान में एक अलग दृष्टिकोण का उपयोग कर रहा हूं जिसमें मैंने सभी सामान्य क्षेत्रों (समान कॉलम नाम) को @MappedSuperClass में निकाला है और सुपर क्लास (इन प्रत्येक इकाई के लिए एक) को दो अलग-अलग वर्ग (एक इकाई के लिए एक) बनाया है कक्षाओं में केवल अलग-अलग कॉलम नामों के साथ समान फ़ील्ड होते हैं, जहां लागू होते हैं)।

+0

[जेपीए का संभावित डुप्लिकेट, अलग-अलग टेबल मैप करने के लिए एक ही कक्षा (इकाई) का उपयोग कैसे करें?] (Http://stackoverflow.com/questions/997203/jpa-how-to-use-the-same-class -entity-to-map-different-table) –

+0

पास्कल, यह वास्तव में इरादा है, केवल अंतर यह है कि मैं एक ही कक्षा में दो अलग-अलग इकाइयों को मैप करना चाहता हूं। जेपीए के विपरीत, हाइबरनेट में, कक्षाएं इकाइयों से अलग हो सकती हैं। संक्षेप में, हालांकि, मैं वास्तव में एक वर्ग को दो टेबल तक मैप करने की कोशिश कर रहा हूं।प्रतिक्रिया के लिए – Jay

उत्तर

18

का उपयोग @MappedSuperclass, तो आप इस प्रकार आगे बढ़ना होगा:

@MappedSuperclass 
public class Transaction ... 

@Entity 
@Table(name="tbl_creditcard_approved_txns") 
public class DeclinedTransaction extends Transaction ... 

@Entity 
@Table(name="tbl_creditcard_declined_txns") 
public class ApprovedTransaction extends Transaction ... 

उपयोग @AttributeOverride, लेन-देन वस्तुओं के दो प्रकार के बीच स्तंभ नाम ओवरराइड करने के लिए यदि आवश्यक हो तो।

अद्यतन: मैं देखता हूं कि आप एक EntityManagerFactory में एक @ एंटिटी को दो टेबल पर मैप करना चाहते हैं ... मुझे नहीं लगता कि आप ऐसा कर सकते हैं।

+1

एलईएस 2, धन्यवाद। आपने जो सुझाव दिया है वह वह दृष्टिकोण है जिसे मैंने वर्तमान में लिया है। जैसा कि आपने देखा, मैं सोच रहा था कि क्या एक इकाई को दो अलग-अलग तालिकाओं में मैप करना संभव है। – Jay

+0

यदि मैं एक तालिका से दूसरी पंक्ति में एक पंक्ति को स्थानांतरित करता हूं, तो मैं कैसे सुनिश्चित कर सकता हूं कि पंक्ति आईडी समान रखी जाए? – splinter123

+0

जो एक बुरा विचार की तरह लगता है, लेकिन मुझे पूरी तरह से यकीन नहीं है क्यों :) यह सिर्फ मेरे सहजता के खिलाफ है। पंक्ति आईडी को रखने के लिए उपयोग केस क्या है? – les2

2

ऐसा करने का दूसरा तरीका डेटाबेस परत पर एक विभाजित तालिका का उपयोग करना होगा जो आपके जावा कोड में एक एकल तालिका दिखाई देगा।

यह संभवतः एक सामान्य नियम के रूप में जाने का तरीका है, जितना अधिक स्मार्ट विभाजन आप करते हैं, तेज़ी से आपके प्रश्न हो सकते हैं।

2

आप दो अलग अलग हठ इकाइयों या दो अलग-अलग संस्थाओं उपयोग करना होगा। यह पहले से ही here का उत्तर दिया गया था।