2012-05-03 12 views
5

आइए मैं मेजमानचित्रण दो सिंगल टेबल पर कक्षाएं

उपयोगकर्ता
-id: लंबे
-login: varchar
-weapon: varchar
-magic: varchar

और मैं इस तालिका को दो वर्गों (हाइबरनेट/जेपीए का उपयोग करके)

पर मैप करना चाहता हूं

और

class Warrior 
{ 
    long id; 
    String login; 
    String magic; 
} 

और अगर मैं HQL क्वेरी भेजें: SELECT m FROM Mag m WHERE m.login = ? तो मैं पत्रिका उदाहरण मिल
और अगर मैं HQL क्वेरी भेजें: SELECT w FROM Warrior w WHERE w.login = ? तो मैं योद्धा उदाहरण
मैं इस

की तरह कुछ बनाने की कोशिश मिल
@Entity 
@Table(name = "User") 
class User 
{ 
    long id; 
    String login; 
} 

@Entity 
class Mag extends User 
{ 
    String magic; 
} 

@Entity 
class Warrior extends User 
{ 
    String weapon; 
} 

लेकिन @ विरासत को भेदभावकर्ता कॉलम की आवश्यकता है, लेकिन मेरे पास भेदभावकर्ता नहीं है।

उत्तर

8

आप MappedSuperClass की तलाश में हैं, जो उपclasses को भेदभाव करने की आवश्यकता के बिना सुपरक्लास से एनोटेशन प्राप्त करने की अनुमति देता है।

2

यदि आपके पास डिलीमिनेटर कॉलम है, तो आप इसके लिए डिस्कमिनेटर का उपयोग कर सकते हैं। आप deliminator स्तंभ मान लें

utype चार है (1)

और अगर

utype = मी, कि एक पत्रिका इकाई और

utype = डब्ल्यू, वह यह है कि है योद्धा इकाई

कृपया कोड को हल करें।

@Entity 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name = "utype", discriminatorType = DiscriminatorType.CHAR) 
@Table(name = "User") 
class User 
{ 
    long id; 
    String login; 
} 

@Entity 
@DiscriminatorValue("m") 
class Mag extends User 
{ 
    String magic; 
} 

@Entity 
@DiscriminatorValue("w") 
class Warrior extends User 
{ 
    String weapon; 
} 
संबंधित मुद्दे