बाइट [] संपत्ति को एनोटेट करने का पोर्टेबल तरीका क्या है?
आपको क्या चाहिए इस पर यह निर्भर है। जेपीए एक गैर-एनोटेट byte[] जारी रख सकता है . जेपीए 2.0 विनिर्देश से:
11.1.6 बुनियादी व्याख्या
Basic एनोटेशन डेटाबेस कॉलम में मैपिंग का सबसे सरल प्रकार है। Basic एनोटेशन एक स्थायी संपत्ति या निम्न में से किसी भी प्रकार के उदाहरण चर पर लागू किया जा सकता है:जावा आदिम, प्रकार, आदिम प्रकार के रैपर,java.lang.String ,java.math.BigInteger ,java.math.BigDecimal ,java.util.Date ,java.util.Calendar , java.sql.Date ,java.sql.Time , java.sql.Timestamp ,byte[] , byte[] , char[] , Character[] , enums, और कोई अन्य प्रकार जो Serializable . को लागू करता है .जैसा कि धारा 2.8 में वर्णित है, Basic . का उपयोग इस प्रकार के निरंतर क्षेत्रों और गुणों के लिए एनोटेशन वैकल्पिक है। यदि ऐसे क्षेत्र या संपत्ति के लिए मूल व्याख्या निर्दिष्ट नहीं है, तो मूल एनोटेशन के डिफ़ॉल्ट मान लागू होंगे।
और हाइबरनेट इसे "डिफ़ॉल्ट रूप से" एक SQL VARBINARY . में मैप करेगा (या एक SQL LONGVARBINARY Column के आधार पर size?) जिसे PostgreSQL एक bytea . के साथ संभालता है ।
लेकिन अगर आप byte[] चाहते हैं एक बड़ी वस्तु में संग्रहीत करने के लिए, आपको @Lob . का उपयोग करना चाहिए . विशिष्टता से:
11.1.24 लोब एनोटेशन
एक Lob एनोटेशन निर्दिष्ट करता है कि apersistent संपत्ति या फ़ील्ड adatabase समर्थित बड़े ऑब्जेक्ट प्रकार के लिए एक बड़े ऑब्जेक्ट के रूप में बने रहना चाहिए। पोर्टेबल अनुप्रयोगों को Lob का उपयोग करना चाहिए डेटाबेस में मैप करते समय एनोटेशन Lob प्रकार। Lob एनोटेशन का उपयोग मूल एनोटेशन के साथ या ElementCollection . के संयोजन में किया जा सकता है एनोटेशन जब तत्व संग्रह मूल्य मूल प्रकार का होता है। एक Lob या तो एक द्विआधारी orcharacter प्रकार हो सकता है। Lob प्रकार लगातार क्षेत्र या संपत्ति के प्रकार से अनुमानित है और, स्ट्रिंग और वर्ण प्रकारों को छोड़कर, ब्लॉब के लिए डिफ़ॉल्ट है।
और हाइबरनेट इसे SQL BLOB में मैप करेगा कि PostgreSQL एक oid . के साथ संभालता है ।
क्या यह हाइबरनेट के कुछ हाल के संस्करण में तय किया गया है?
खैर, समस्या यह है कि मुझे नहीं पता कि समस्या वास्तव में क्या है। लेकिन मैं कम से कम यह कह सकता हूं कि 3.5.x शाखा में 3.5.0-बीटा-2 (जहां एक बदलाव पेश किया गया है) के बाद से कुछ भी नहीं बदला है।
लेकिन HHH-4876, HHH-4617 और PostgreSQL और BLOBs जैसे मुद्दों की मेरी समझ (PostgreSQLDialect के javadoc में उल्लिखित है) ) यह है कि आपको निम्नलिखित संपत्ति सेट करनी है
hibernate.jdbc.use_streams_for_binary=false
यदि आप oid . का उपयोग करना चाहते हैं यानी byte[] @Lob . के साथ (जो मेरी समझ VARBINARY . के बाद से है वह नहीं है जो आप Oracle के साथ चाहते हैं)। क्या आपने यह कोशिश की?
एक विकल्प के रूप में, HHH-4876 बहिष्कृत PrimitiveByteArrayBlobType का उपयोग करने का सुझाव देता है पुराना व्यवहार प्राप्त करने के लिए (पूर्व हाइबरनेट 3.5)।
संदर्भ
- जेपीए 2.0 विशिष्टता
- अनुभाग 2.8 "गैर-रिलेशनशिप फ़ील्ड या प्रॉपर्टी के लिए डिफ़ॉल्ट मैपिंग"
- अनुभाग 11.1.6 "बुनियादी व्याख्या"
- धारा 11.1.24 "लॉब एनोटेशन"
संसाधन
- https://opensource.atlassian.com/projects/hibernate/browse/HHH-4876
- https://opensource.atlassian.com/projects/hibernate/browse/HHH-4617
- https://relation.to/Bloggers/PostgreSQLAndBLOBs