जैसे @ जेफ-वांग ने बताया है, पोस्टग्रेस सरणी प्रकार जेपीए द्वारा समर्थित नहीं हैं। विशिष्ट मानचित्रण कार्यान्वयन मैन्युअल रूप से जोड़े जा सकते हैं, लेकिन @ vlad-mihalcea ने पहले ही नमूना कार्यान्वयन प्रदान कर दिया है। आप इसे मावेन सेंट्रल से प्राप्त करते हैं:
<निर्भरता> com.vladmihalcea hibernate-types-52 <संस्करण>${hibernate-types.version}
अधिक विवरण यहां पाया जा सकता है:https://vladmihalcea.com/how-to-map-java-and-sql-arrays-with-jpa-and-hibernate/
निर्भरता को हल करने के बाद, विशिष्ट मानचित्रण के लिए एक कार्यान्वयन जोड़ा जाना चाहिए। आइए हम Postgres bigint[]
take लें उदहारण के लिए। उदाहरण के लिए इसे मैप किया जा सकता है Long[]
. सबसे पहले, हमें वांछित प्रकार के लिए डिस्क्रिप्टर जोड़ने की जरूरत है:
import com.vladmihalcea.hibernate.type.array.internal.AbstractArrayTypeDescriptor;सार्वजनिक वर्ग LongArrayTypeDescriptor AbstractArrayTypeDescriptor को बढ़ाता है { सार्वजनिक स्थैतिक अंतिम LongArrayTypeDescriptor INSTANCE =new LongArrayTypeDescriptor(); सार्वजनिक LongArrayTypeDescriptor () {सुपर (लॉन्ग []। क्लास); } संरक्षित स्ट्रिंग getSqlArrayType () {वापसी "बिगिंट"; }}
उसके बाद वास्तविक मानचित्रण वर्ग:
आयात करें AbstractSingleColumnStandardBasicTypeऐसा किया जा रहा है, बस इतना करना बाकी है कि स्प्रिंग कॉन्फ़िगरेशन में हमारे मैपिंग को ध्यान में रखना है। मैं अपने डेटा मॉडल कॉन्फ़िगरेशन को एनोटेशन आधारित रूप में अलग से रख रहा हूं:
आयात करें TypeDefs({@TypeDef(name ="long-array", typeClass =LongArrayType.class), @TypeDef(name ="short-array", typeClass =ShortArrayType.class)})@MappedSuperclasspublic class DaoConfig {}अब सब कुछ उपयोग के लिए तैयार है। डीएओ परिभाषा में नई जोड़ी गई मैपिंग के साथ एनोटेट किया गया उदाहरण कॉलम निम्न जैसा दिखता है:
@Type( type ="long-array")@Column(ColumnDefinition ="bigint[]")private Long[] लेखक;