है, मुझे विभिन्न डेटाबेस के बीच स्विच करते समय बड़ी ऑब्जेक्ट्स (बीएलओबी) युक्त हाइबरनेट मैपिंग के बारे में एक अजीब समस्या है।हाइबरनेट, पोस्टग्रेस्क्ल: कॉलम "एक्स" टाइप ओड का है लेकिन अभिव्यक्ति प्रकार बाइट
@Lob
private byte[] binaryData;
क्षेत्र के ऊपर MySQL में और Oracle में एक बाइट सरणी क्षेत्र बनाता है, PostreSQL में हालांकि यह प्रकार OID के एक क्षेत्र पैदा करता है।
अब जब मैं इस क्षेत्र में यह अन्य डेटाबेस में ठीक काम करता है तक पहुँचने का प्रयास है, लेकिन PostgreSQL में यह निम्न त्रुटि
Column "binaryData" is of type oid but expression is of type bytea.
तो मैं बस "@Lob" एनोटेशन, को दूर करने की कोशिश की के साथ विफल हो जो PostgreSQL के लिए समस्या का समाधान करेगा, हालांकि इस एनोटेशन के बिना MySQL में, हाइबरनेट प्रकार "tinyblob" का एक क्षेत्र बनाता है, जो हमारे ज्यादातर मामलों में छोटा है। और, जैसा कि हम एक से अधिक पर्यावरण में इस परियोजना का उपयोग करना चाहते हैं, स्विच करने के लिए दो अलग-अलग मैपिंग होने के लिए परेशान होना मुश्किल है।
क्या कोई एनोटेशन है जो postgreSQL को @Lob के साथ एनोटेट किए गए फ़ील्ड के लिए बाइट का उपयोग करने के लिए मजबूर करता है? या क्या यह किसी भी तरह से @ लॉब को छोड़ना और MySQL को एक बड़े डेटाटाइप के साथ आवंटित करने के लिए मजबूर करने के लिए कुछ और डाल सकता है क्योंकि यह @Lob का उपयोग करेगा?
मैं भी, इस
if (field is of type oid)
store it as oid
else if (field is of type bytea)
store it as bytea
else
// not storable
की तरह एक समाधान और एक गेटर के रूप में ही है की कल्पना कर सकता यदि इस
संपादित की तरह करने के लिए एक रास्ता मौजूद है:
निम्नलिखित घोषणा काम कर रही है। यह OID के रूप में स्तंभ आबंटित करता है, लेकिन यह जानता है की दुकान और इस तरह के एक क्षेत्र
@Lob
@Type(type="org.hibernate.type.PrimitiveByteArrayBlobType")
private byte[] binaryFile;
हाय डॉन! आपके उत्तर के लिए धन्यवाद। मैंने इसे आजमाया, और यह ठीक काम करता है, हालांकि मुझे इस बीच एक साधारण समाधान मिला जो मैंने प्रश्न में जोड़ा था – Hons