मुझे एक अजीब त्रुटि संदेश दिखाई दे रहा है और समस्या के बारे में कुछ विचारों की तलाश में हूं। मैं जेपीए का उपयोग करने के लिए नया हूं।ब्रेनस्टॉर्मिंग: अजीब जेपीए समस्या, संभवतः क्लासपाथ या जार संस्करण समस्या?
मेरे पास एक ऐसा एप्लिकेशन है जहां मैं स्प्रिंग एंटिटी मैनेजर फैक्ट्री (लोकलकॉन्टेनर एंटीटी मैनेजर फैक्ट्रीबीन) का उपयोग कर रहा हूं, मेरे ओआरएम प्रदाता के रूप में एक्लिप्ससेंक, एक MySQL डीबी से जुड़ा हुआ है और मेवेन के साथ बनाया गया है। मुझे यकीन नहीं है कि इनमें से कोई भी मामला .....
जब मैं इस एप्लिकेशन को ग्लासफ़िश पर तैनात करता हूं, तो एप्लिकेशन अपेक्षा के अनुसार काम करता है।
समस्या यह है कि मैंने ग्लासफ़िश के बाहर चलाने के लिए अकेले स्टैंड यूनिट परीक्षणों का एक सेट बनाया है जो सही तरीके से काम नहीं कर रहे हैं। मैं निम्न त्रुटि (मैं कक्षा के नाम एक छोटे से संपादित किया है)
com.xyz.abc.services.persistence.entity.MyEntity cannot be cast to com.xyz.abc.services.persistence.entity.MyEntity
वस्तु एक ही प्रकार के एक वर्ग में ढाला नहीं जा सकता है? ऐसे कैसे हो सकता है?
यहाँ कोड गलती से हुआ है कि का एक टुकड़ा है
Query q = entityManager.createNamedQuery("MyEntity.findAll");
List entityObjects = q.getResultList();
for (Object entityObject: entityObjects) {
com.xyz.abc.services.persistence.entity.MyEntity entity = (com.xyz.abc.services.persistence.entity.MyEntity) entityObject;
इससे पहले, मैं इस कोड है कि एक ही त्रुटि का उत्पादन किया था:
CriteriaQuery cq = entityManager.getCriteriaBuilder().createQuery();
cq.select(cq.from(com.xyz.abc.services.persistence.entity.MyEntity.class));
List entityObjects = entityManager.createQuery(cq).getResultList();
for (Object entityObject: entityObjects) {
com.xyz.abc.services.persistence.entity.MyEntity entity = (com.xyz.abc.services.persistence.entity.MyEntity) entityObject;
इस कोड सवाल यह है कि एक ही है मेरे पास है सर्वर पर तैनात
यहाँ अंतरतम अपवाद है अगर यह मदद करता है
Caused by: java.lang.ClassCastException: com.xyz.abc.services.persistence.entity.MyEntity cannot be cast to com.xyz.abc.services.persistence.entity.MyEntity
at com.xyz.abc.services.persistence.entity.factory.MyEntityFactory.createBeans(MyEntityFactory.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:115)
... 37 more
मेरा अनुमान है कि कुछ जार Glassfish में उपयोग किया जा रहा है कि लोगों को मैं परीक्षा में उपयोग कर रहा हूँ से अलग है यह है कि। मैंने "जार" के रूप में सूचीबद्ध सभी जारों को देखा है और मुझे यकीन है कि वे ग्लासफ़िश से सभी समान हैं।
मुझे बताएं कि क्या आपने पहले यह अजीब मुद्दा देखा है, या इसे ठीक करने के लिए कोई विचार है।
हाँ ठीक है, यह एक मुद्दा प्रतीत होता है। MyEntity की क्लास लोडर है [email protected] MyEntity वस्तु की क्लास लोडर है org.springfr[email protected]16089a5 अब इसे ठीक करने ???: यहाँ उत्पादन होता है मैं उन लेखों में खोदने जा रहा हूं जिन्हें आपने लिंक किया था। – Vinnie
@ विनी दुर्भाग्य से मैं आपके द्वारा उपयोग किए जाने वाले टूल से परिचित नहीं हूं, इसलिए मैं अधिक ठोस सहायता प्रदान नहीं कर सकता। शुभकामनाएं - आपको इसकी आवश्यकता होगी ... –
ठीक है, यह शायद एक रूकी गलती है, लेकिन आपका सुझाव (और स्थानीय स्तर पर विभिन्न क्लासलोडर्स का उपयोग करने के बारे में रहस्योद्घाटन) ने एक व्यावहारिक समाधान का नेतृत्व किया। यह देखते हुए कि खेल में अलग-अलग क्लासलोडर थे, मुझे लगता है कि स्प्रिंग के लोकल कॉन्टेनेर एंटीटी मैनेजर फैक्ट्रीबीन मेरे यूनिट परीक्षणों के दौरान उपयोग करने का सही विकल्प नहीं था। मैं LocalEntityManagerFactoryBean पर स्विच किया (जिसका अर्थ यह भी था कि मुझे एक नई दृढ़ता इकाई की आवश्यकता है क्योंकि मैं डेटासोर्स इंजेक्ट नहीं कर सका) और चीजें अब स्थानीय रूप से काम कर रही हैं। सहायता के लिए धन्यवाद! – Vinnie