2012-09-24 21 views
9

मुझे पता है कि अगर यह कुछ POJO जेपीए संस्था के लिए कुछ विशेषताओं और व्यवहार को जोड़ने के लिए संभव है की जरूरत है जोड़ने के लिए जेपीए इकाई का विस्तार, और फिर बढ़ाया वस्तुओं के बजाय वापस जाने के लिए entityManager बनाने के लिए का सिर्फ POJO entitys, निम्न उदाहरण की तरह:यह बढ़ा कर (<strong>का उपयोग कर</strong> प्रदाता हाइबरनेट) गुण और तर्क

POJO जेपीए इकाई कक्षा

@Entity 
@Table("test") 
public class Test implements Serializable { 
} 

विस्तारित कक्षा

public class ExtendedTest extends Test { 
... 
} 

लाई जा रही है विस्तारित कक्षा की वस्तुओं

List<ExtendedTest> extendedList = entityManager.createNamedQuery("ExtendedTest.findByFoo").setParameter("foo", "bar").getResultList(); 

अन्य संभव तरीके से मैं का आकलन कर रहा हूँ एक समग्र इकाई के साथ funcionality का विस्तार और सभी setters और getters सौंपने है, लेकिन इस विशाल टेबल के साथ बहुत काम हो सकता है:

public class ExtendedTest2 { 
    private Test test; 

    public ExtendedTest2(Test test) { 
     this.test = test; 
    } 

    public getFoo() { 
     return test.getFoo(); 
    } 

    public getBar() { 
     return test.getBar(); 
    } 

    ... 
} 

किसी भी सुझाव की बहुत सराहना की जाएगी।

+0

मुझे नहीं लगता कि संभव है के रूप में आप खुशी से इकाई कक्षा में अपने तर्क और अन्य विशेषताओं डाल सकते है। – dcernahoschi

+0

मैं वास्तव में अपनी इकाई वर्ग में अन्य विशेषताओं और तर्क जोड़ सकता हूं लेकिन "खुशी से" नहीं, मेरा विचार पीओजेओ जैसी संस्थाओं को रखना और केवल तालिका प्रतिनिधित्व गुणों को पकड़ना है, वास्तव में यही कारण है कि मैं इस सवाल को पहली जगह क्यों बना रहा हूं। – jmoreira

उत्तर

16

@Inheritance

@Entity 
@Table(name="TEST") 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
public class Test { 
    ... 
} 

@Entity 
public class ExtendedTest 
    extends Test { 
    ... 
} 

या @MappedSuperclass का उपयोग

@MappedSuperclass 
public class Test { 
    ... 
} 

@Entity 
public class ExtendedTest 
    extends Test { 
    ... 
} 
+3

अगर कोई इसे प्राप्त करता है, तो अगर यह गलत है या संस्करण (जेपीए 2.1, ग्रहण लिंक) है, लेकिन मुझे बच्चे वर्ग में '@ विरासत (रणनीति = विरासत टाइपिंग। एसएनजीईएलएबीएलईएल) एनोटेशन जोड़ना था, माता-पिता नहीं – rekiem87

+2

बस संदर्भ के लिए: किसी सारणी वर्ग पर '@ Entity' का उपयोग करते समय, और प्रत्येक व्युत्पन्न इकाई को अपनी स्वयं की तालिका बनाना चाहिए, इस मामले में आपको * अमूर्त पैरेंट * तालिका पर' @ विरासत (रणनीति = विरासत प्रकार टाइप करें .ABLE_PER_CLASS) 'का उपयोग करना होगा ! – membersound