PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

क्या जेपीए (एक्लिप्सलिंक) कस्टम प्रकार संभव हैं?

एसओ के माध्यम से चलना मुझे पोस्टग्रेज में मैपिंग के लिए जेएसओएन या एक्सएमएल प्रकारों के संबंध में इस तरह के कई प्रश्न मिले हैं। ऐसा लगता है कि किसी को भी कस्टम पोस्टग्रेज प्रकार से पढ़ने की समस्या का सामना नहीं करना पड़ा है, इसलिए यहां शुद्ध जेपीए प्रकार रूपांतरण तंत्र का उपयोग करके पढ़ने और लिखने दोनों का समाधान है।

JDBC ड्राइवर अज्ञात (जावा के लिए) प्रकारों के लिए सभी विशेषताओं को org.postgresql.util.PGobject ऑब्जेक्ट में मैप करता है, इसलिए यह इस प्रकार के लिए कनवर्टर बनाने के लिए पर्याप्त है। यहाँ इकाई उदाहरण है:

@Entity
public class Course extends AbstractEntity {
    @Column(name = "course_mapped", columnDefinition = "json")
    @Convert(converter = CourseMappedConverter.class)
    private CourseMapped courseMapped;  // have no idea why would you use String json instead of the object to map

    // getters and setters
}

यहाँ कनवर्टर उदाहरण:

@Converter
public class CourseMappedConverter implements AttributeConverter<CourseMapped, PGobject> {
    @Override
    public PGobject convertToDatabaseColumn(CourseMapped courseMapped) {
        try {
            PGobject po = new PGobject();
            // here we tell Postgres to use JSON as type to treat our json
            po.setType("json");
            // this is Jackson already added as dependency to project, it could be any JSON marshaller
            po.setValue((new ObjectMapper()).writeValueAsString(courseMapped));
            return po;
        } catch (JsonProcessingException e) {
            e.printStackTrace();
            return null;
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public CourseMapped convertToEntityAttribute(PGobject po) {
        try {
            return (new ObjectMapper()).readValue(po.getValue(),CourseMapped.class);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

यदि आपको वास्तव में अपनी इकाई में स्ट्रिंग JSON प्रतिनिधित्व से चिपके रहने की आवश्यकता है, तो आप स्ट्रिंग प्रकार के लिए इस तरह कनवर्टर बना सकते हैं

implements AttributeConverter<String, PGobject>

यहां अवधारणा का बहुत गंदा (हालांकि काम कर रहा है) सबूत है, यह जेपीए को यह बताने के लिए नकली वस्तु क्रमांकन का भी उपयोग करता है कि वस्तु को बदल दिया गया था

https://github.com/sasa7812/psql-cache-evict-POC ए>



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. plpgsql फ़ंक्शन में तालिका और स्तंभ नामों को तर्क के रूप में परिभाषित करें?

  2. संभावित रिक्त फ़ील्ड के साथ Django OneToOneField

  3. पोस्टग्रेज़ पढ़ने की पहुँच के लिए CSV फ़ाइल नहीं खोल सकते:अनुमति अस्वीकृत

  4. निष्क्रिय PostgreSQL कनेक्शन के लिए कोई समयबाह्य है?

  5. टेबल को पोस्टग्रेज करने के लिए डेटाफ्रेम कैसे लिखें?