2009-07-02 20 views
9

के साथ MySQL enum मेरे पास एक enum का उपयोग कर डेटाबेस तालिका है। यह पहले से ही हाइबरनेट (एक्सएमएल का उपयोग करके) के साथ काम कर रहा है, और मैं इसे एनोटेशन में बदलने की कोशिश कर रहा हूं क्योंकि यह अभी भी अंतिम टुकड़ों में से एक है जो अभी भी एक्सएमएल नोटेशन का उपयोग कर रहा है।हाइबरनेट

स्तंभ परिभाषा:

enum('Active','Pending','Cancelled','Suspend') 

निम्नलिखित काम करता है:

<property 
    name="status" 
    column="STATUS" 
    type="string" 
    not-null="true" /> 

यह काम नहीं करता:

@Column(name = "status") 
public String status; 

एनोटेशन शैली स्टार्टअप पर निम्न अपवाद की ओर जाता है: org.hibernate.HibernateException: कॉलम के लिए उपयोगकर्ता डीटीओ में गलत स्तंभ प्रकार एन स्थिति। मिला: enum, अपेक्षित: वर्कर (255)

क्या मेरे लिए स्ट्रिंग को स्वीकार करने के लिए मजबूर करने का कोई तरीका है क्योंकि यह XML नोटेशन का उपयोग कर रहा है?

उत्तर

18

मैंने इसे समझ लिया। यह होना चाहिए:

@Column(name="status", columnDefinition="enum('Active','Pending','Cancelled','Suspend')") 
public String status; 
+0

आपका समाधान कम से कम MySQL डेटाबेस के लिए सही है, लेकिन उदाहरण के लिए परीक्षणों में उपयोग किए गए एच 2 डेटाबेस (स्वचालित स्कीमा निर्माण के लिए केस) में विफल रहता है। ऐसा लगता है कि न ही 100% पोर्टेबल है, जहां तक ​​मुझे याद है कि PostgresSQL पर भी समस्याएं हैं (कम से कम अगर हम उम्मीद करते हैं कि स्कीमा ऑटो उत्पन्न हुआ है)। – kornicameister