मैं वास्तव में PGObject और कन्वर्टर्स वाले की तुलना में एक सरल तरीके का उपयोग कर रहा हूं। चूंकि पोस्टग्रेज में एनम काफी स्वाभाविक रूप से टेक्स्ट से परिवर्तित हो जाते हैं, इसलिए आपको बस इसे वह करने देना चाहिए जो वह सबसे अच्छा करता है। मैं अर्जन के मूड का उदाहरण उधार लूंगा, अगर उन्हें कोई आपत्ति नहीं है:
पोस्टग्रेज में एनम प्रकार:
CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');
जावा में क्लास और एनम:
public @Entity class Person {
public static enum Mood {sad, ok, happy};
@Enumerated(EnumType.STRING)
Mood mood;
}
वह @Enumerated टैग कहता है कि एनम का क्रमांकन/डिसेरिएलाइज़ेशन टेक्स्ट में किया जाना चाहिए। इसके बिना, यह int का उपयोग करता है, जो किसी भी चीज़ से अधिक परेशानी वाला है।
इस समय आपके पास दो विकल्प हैं। आप या तो:
-
स्ट्रिंगटाइप=अनिर्दिष्ट जोड़ें कनेक्शन स्ट्रिंग के लिए, जैसा कि जेडीबीसी कनेक्शन पैरामीटर में समझाया गया है। यह पोस्टग्रेस को दाएं तरफ के प्रकार का अनुमान लगाने देता है और सबकुछ पर्याप्त रूप से परिवर्तित करता है, क्योंकि इसे 'एनम =अज्ञात' जैसा कुछ प्राप्त होता है, जो एक अभिव्यक्ति है जो पहले से ही जानता है कि क्या करना है (फ़ीड बाएं हाथ के प्रकार deserialiser के लिए ? मान)। यह पसंदीदा विकल्प है, क्योंकि यह एक ही बार में सभी सरल यूडीटी जैसे कि एनम के लिए काम करना चाहिए।
jdbc:postgresql://localhost:5432/dbname?stringtype=unspecified
या:
-
डेटाबेस में वर्चर से एनम में एक अंतर्निहित रूपांतरण बनाएं। तो इस दूसरे मामले में डेटाबेस को 'एनम =वर्कर' जैसे कुछ असाइनमेंट या तुलना प्राप्त होती है और यह अपने आंतरिक कैटलॉग में एक नियम पाता है जिसमें कहा गया है कि यह वर्चर के सीरियलाइजेशन फ़ंक्शन के माध्यम से दाएं हाथ के मूल्य को पास कर सकता है और उसके बाद डिसेरिएलाइजेशन फ़ंक्शन एनम यह जरूरत से ज्यादा कदम है; और कैटलॉग में बहुत अधिक निहित कास्ट होने से मनमानी प्रश्नों की अस्पष्ट व्याख्या हो सकती है, इसलिए इसे कम से कम उपयोग करें। कास्ट क्रिएशन है:
कास्ट बनाएं (मूड के रूप में अलग-अलग कैरेक्टर) बिना इंप्लिकिट के;
बस उसी के साथ काम करना चाहिए।