मैंने अपने आवेदन के लिए एक मैपर वर्ग बनाया है, जो उपयोग करने के लिए एक सरल इंटरफ़ेस प्रदान करता है:

Destination destination = mapper.map(sourceObject, Destination.class);

//or just

mapper.map(sourceObject, destination);

मैपर इंस्टेंस में कन्वर्टर्स का नक्शा होता है जिसे क्लासपेयर द्वारा मैप किया जाता है:

class ClassPair() {

    private Class sourceType;
    private Class destinationType;
    ...
}

class Mapper {

    private Map<ClassPair, Converter> converters;
    ...
}

समस्या यह है कि जब मैं एक स्थायी इकाई को दूसरे प्रकार में बदलने की कोशिश कर रहा हूं, तो मेरा मैपर एनपीई के साथ विफल हो जाता है। यह इस तथ्य के कारण है कि स्थायी इकाई का प्रकार इस इकाई का मूल वर्ग नहीं है, बल्कि उत्पन्न हाइबरनेटप्रॉक्सी कार्यान्वयन है।

मैंने Hibernate.unproxy() विधि का उपयोग करने का प्रयास किया है, लेकिन यह सभी एप्लिकेशन में जगह ले चुका है। यह काम करता है, लेकिन, मुझे लगता है, यह वास्तव में एक बुरा अभ्यास है।

इसलिए, मुझे किसी तरह किसी इकाई के मूल वर्ग को निर्धारित करने की आवश्यकता है।

1
Maksim Danilau 17 सितंबर 2019, 12:47

1 उत्तर

सबसे बढ़िया उत्तर

प्रत्येक HibernateProxy इंस्टेंस अपने अंतर्निहित आलसी इनिशियलाइज़ेशन हैंडलर तक पहुँच प्रदान करता है, जिसमें जानकारी की आवश्यकता होती है।

if (value instanceof HibernateProxy) {
    return ((HibernateProxy) value).getHibernateLazyInitializer().getPersistentClass();
}
0
Maksim Danilau 17 सितंबर 2019, 09:51