है मैं अनिवार्य रूप से निम्नलिखित श्रेणियां होती हैं:DTYPE डालने नहीं हाइबरनेट - मान शून्य
@Entity
@Table(name="user")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class User implements Serializable
{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "email_address")
private String emailAddress;
/* getters and setters not shown */
}
और
@Entity
@Table(name="admin")
public class Admin extends User implements Serializable
{
private static final long serialVersionUID = 1L;
@Column(name = "role")
private String role;
/* getters and setters not shown */
}
मैं डिफ़ॉल्ट एक स्तंभ DTYPE varchar(31)
जो user
तालिका में मौजूद है द्वारा उपयोग करने के लिए हाइबरनेट की उम्मीद है। मेरे कोड एक नया व्यवस्थापक वस्तु मैं कंसोल के लिए लॉग इन निम्न देखें जारी रहती है की कोशिश करता है:
Hibernate: insert into user (email_address) values (?)
Hibernate: insert into admin (role) values (?)
इस प्रकार का कोई प्रयास नहीं user.DTYPE
स्तंभ स्थापित करने के लिए हाइबरनेट द्वारा किया जाता है, और यह डेटाबेस में शून्य रहता है। मुझे उम्मीद है कि यह Admin
पर सेट हो जाएगा।
मैं क्या गलत कर रहा हूं? मैंने Admin
कक्षा (और उपयोगकर्ता को भी जोड़ने की कोशिश की) पर @DiscriminatorColumn
उपयोगकर्ता वर्ग और @DiscriminatorValue
पर स्पष्ट रूप से सेट करने का प्रयास किया है, लेकिन इसका कोई फायदा नहीं हुआ है।
पोस्टिंग के बाद 8 घंटे बाद मैं अपने प्रश्न का उत्तर नहीं दे सकता: कुछ और सोचने के बाद: मेरा मानना है कि ऐसा इसलिए है क्योंकि 'उपयोगकर्ता' सार है। चूंकि कोई 'उपयोगकर्ता' ऑब्जेक्ट सीधे चालू नहीं किया जा सकता है, इसलिए एक प्रकार के भेदभाव करने की कोई आवश्यकता नहीं है, क्योंकि समय समय से पहले ज्ञात होगा। अगर मैं गलत हूं तो किसी ने मुझे बताया! – Alex