2009-07-01 26 views
7

के माध्यम से एम्बेडेड एम्बेडेड क्लास त्रुटि मैपिंग हमारे पास एक एपीआई के रूप में उपयोग किए जाने वाले इंटरफेस का एक सेट है, और अन्य मॉड्यूल से संदर्भित है। उन इंटरफेस के ठोस कार्यान्वयन का एक सेट, "मुख्य" ऐप मॉड्यूल के लिए निजी। इन कक्षाओं में कई एनोटेशन (जेपीए के साथ-साथ एक्सएमएल सीरियलाइजेशन के लिए एक्सस्ट्रीम) भी शामिल हैं।हाइबरनेट और जेपीए - एक इंटरफेस

मैंने एक समस्या में भाग लिया है। हमारे पास एक उपयोगकर्ता वर्ग है जिसमें स्थान से संबंधित कई फ़ील्ड हैं। हम उन्हें एक एड्रेस क्लास में रोल करना चाहते हैं। हम डेटा (अभी के लिए) एक ही टेबल में रहना चाहते हैं। दृष्टिकोण एक एम्बेडेड वर्ग है।

समस्या यह है कि टाइप हस्ताक्षर केवल उन इंटरफेस को पूरा करने के लिए अन्य इंटरफेस को संदर्भित करना चाहिए जो वे लागू करते हैं।

org.hibernate.MappingException:

जब मैं एक UserImpl लागू करने के लिए प्रयास करते हैं, मैं अपवाद com.example.Address, मेज पर: के लिए प्रकार का निर्धारण नहीं किया जा सका उपयोगकर्ता, के लिए कॉलम: [org.hibernate.mapping.Column (पता)]

उदाहरण कोड:

interface User { 
    int getId(); 
    String getName(); 
    Address getAddress(); 
} 

@Entity 
class UserImpl implements User { 
    int id; 
    String name; 
    Address address; 

    int getId() { 
     return id; 
    } 

    void setId(int id) { 
     this.id = id; 
    } 

    String getName() { 
     return name; 
    } 

    String setName(String name) { 
     this.name = name; 
    } 

    @Embedded 
    Address getAddress() { 
     return address; 
    } 

    void setAddress(Address address) { 
     this.address = address; 
    } 
} 


interface Address { 
    String getStreet(); 
    String getCity(); 
    String getState(); 
    String getZip(); 
    String getCountry(); 
} 

@Embeddable 
class AddressImpl implements Address { 
    String street; 
    String city; 
    String state; 
    String zip; 
    String country; 

    public String getStreet() { 
     return street; 
    } 

    public String getCity() { 
     return city; 
    } 

    public String getState() { 
     return state; 
    } 

    //... etc 
} 

उत्तर

13

आप @Target हाइबरनेट एनोटेशन (जो जेपीए एनोटेशन के लिए एक हाइबरनेट विशेष विस्तार है)

@Embedded 
@Target(AddressImpl.class) 
Address getAddress() { 
    return address; 
} 
+0

धन्यवाद उपयोग कर सकते हैं कि वास्तव में एक समाधान है, हालांकि मुझे उम्मीद थी कि यह केवल जेपीए उपयोग करके किया जा सकता है। यह जानने में मदद मिल सकती है कि यह अन्य जेपीए कार्यान्वयन के साथ संभव है या नहीं। –

+0

आपके द्वारा उल्लिखित अपवाद के आधार पर मुझे लगता है कि आप हाइबरनेट का उपयोग कर रहे थे। संभावना है कि अगर यह हाइबरनेट एनोटेशन का हिस्सा है तो इसे अभी तक जेपीए स्पेक में जोड़ा नहीं गया है। – mtpettyp

+1

हम हैं, लेकिन संभव है कि विक्रेता तटस्थ होना अच्छा लगेगा। –

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