2010-09-17 4 views
10

मैं ग्लासफिश में जेपीए का उपयोग करके पोस्टग्रेस्क्ल में एक तालिका को संपादित करने की कोशिश कर रहा हूं। जब मैं एक इकाई डालता हूं, तो यह ठीक चलता है। लेकिन, जब मैं एक ही इकाई को संपादित या निकालने का प्रयास करता हूं, तो यह निम्न त्रुटि से विफल रहता है। कोई उपाय?कोई ऑपरेटर दिए गए नाम और तर्क प्रकार से मेल खाता है। आपको स्पष्ट प्रकार के कोस्ट जोड़ने की आवश्यकता हो सकती है। - नेटबीन्स, पोस्टग्रेस्क्ल 8.4 और ग्लासफ़िश

 
Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException 
Internal Exception: org.postgresql.util.PSQLException: ERROR: operator does not exist: integer = character varying 
    Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts. 
    Position: 38 
Error Code: 0 
     at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333) 
     at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.processExceptionForCommError(DatabaseAccessor.java:1422) 
     at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:799) 
     at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:867) 
     at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:587) 
     at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:530) 
     at org.eclipse.persistence.internal.sessions.AbstractSession.executeCall(AbstractSession.java:914) 
     at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:205) 
     at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:191) 
     at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.deleteObject(DatasourceCallQueryMechanism.java:182) 
     at org.eclipse.persistence.internal.queries.StatementQueryMechanism.deleteObject(StatementQueryMechanism.java:101) 
     at org.eclipse.persistence.queries.DeleteObjectQuery.executeDatabaseQuery(DeleteObjectQuery.java:167) 
     at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:675) 
     at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:589) 
     at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:109) 
     at org.eclipse.persistence.queries.DeleteObjectQuery.executeInUnitOfWorkObjectLevelModifyQuery(DeleteObjectQuery.java:112) 
     at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:86) 
     at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2857) 
     at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1225) 
     at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1207) 
     at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1167) 
     at org.eclipse.persistence.internal.sessions.CommitManager.deleteAllObjects(CommitManager.java:297) 
     at org.eclipse.persistence.internal.sessions.CommitManager.deleteAllObjects(CommitManager.java:256) 
     at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1406) 
     at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.commitToDatabase(RepeatableWriteUnitOfWork.java:547) 
     at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1508) 
     at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.issueSQLbeforeCompletion(UnitOfWorkImpl.java:3128) 
     at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.issueSQLbeforeCompletion(RepeatableWriteUnitOfWork.java:268) 
     at org.eclipse.persistence.transaction.AbstractSynchronizationListener.beforeCompletion(AbstractSynchronizationListener.java:157) 
     at org.eclipse.persistence.transaction.JTASynchronizationListener.beforeCompletion(JTASynchronizationListener.java:68) 
     at com.sun.enterprise.transaction.JavaEETransactionImpl.commit(JavaEETransactionImpl.java:412) 
     ... 25 more 
Caused by: org.postgresql.util.PSQLException: ERROR: operator does not exist: integer = character varying 
    Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts. 
    Position: 38 
     at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062) 
     at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795) 
     at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) 
     at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479) 
     at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:367) 
     at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:321) 
     at com.sun.gjc.spi.base.PreparedStatementWrapper.executeUpdate(PreparedStatementWrapper.java:108) 
     at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:792) 
     ... 53 more 
Java Result: 1 
+0

अगर प्रासंगिक अपने इकाई, इसी मेज, हो सकता है आपके कोड को दिखाने के लिए कृपया, और उत्पन्न एसक्यूएल। [पिछला प्रश्न] देखें (http://stackoverflow.com/questions/2374395/is-it-possible-to-output-generated-sql-using-eclipselink-without-having-to-increa) जेनरेट किए गए SQL आउटपुट को आउटपुट करने के लिए । –

+0

आपको ओआरएम और बाहरी सॉफ़्टवेयर पोस्टग्रेज़ हैक करने के लिए आपको अपने स्वयं के कलाकार पंजीकृत करने और संचालन की तुलना करने की अनुमति नहीं है। [समान प्रश्न में उदाहरण देखने के लिए कृपया] (http://stackoverflow.com/questions/20773805/postgresql-enum-and-character-varying-updating/43748427#43748427)। पीएस यह जवाब था, लेकिन किसी कारण से हटा दिया गया ... – Hubbitus

उत्तर

8

यह मुख्य त्रुटि:

ERROR: operator does not exist: integer = character varying

आप कोड एक पूर्णांक और एक स्ट्रिंग मिलान करने के लिए कोशिश कर रहा है, कि नहीं काम करने के लिए जा रहा है। अपने कोड को ठीक करें, यह देखने के लिए शामिल क्वेरी प्राप्त करें कि आपने इसे ठीक किया है या नहीं। PostgreSQL लॉग फ़ाइलों को भी देखें।

एक कामकाज (कोई समाधान नहीं!) कुछ कास्टिंग करना है। Check this article

+0

क्या आपको यह पता चला कि यह क्या फेंक रहा था? – RMcNairn

11

मुझे यह समस्या थी, और हल हो गया। यह WHERE खंड के कारण पूर्णांक मान के बजाय स्ट्रिंग मान होता है।

0

ब्रो, मुझे एक ही समस्या थी। बात यह है कि मैंने एक प्रश्न निर्माता बनाया है, जो काफी जटिल है जो अपने भविष्यवाणियों को गतिशील रूप से लंबित करता है कि कौन से पैरामीटर सेट किए गए थे और प्रश्नों को कैश किया गया था। वैसे भी, मैंने अपने क्वेरी बिल्डर को बनाने से पहले, मेरे पास एक गैर ऑब्जेक्ट उन्मुख प्रक्रियात्मक कोड था जो एक ही चीज़ बना रहा था (बेशक उसने प्रश्नों को कैश नहीं किया और पैरामीटर का उपयोग नहीं किया) जो दोषपूर्ण काम करता था। अब जब मेरे निर्माता ने एक ही काम करने की कोशिश की, तो मेरे PostgreSQL ने इस गड़बड़ की गलती को फेंक दिया जो आपको भी मिला। मैंने अपने जेनरेट किए गए एसक्यूएल कोड की जांच की और कोई त्रुटि नहीं मिली। वास्तव में अजीब।

मेरी खोज जल्द ही साबित हुई कि यह WHERE खंड में एक विशेष भविष्यवाणी थी जिसने इस त्रुटि को जन्म दिया। फिर भी यह अनुमान कोड द्वारा बनाया गया था जो लगभग बिल्कुल जैसा दिखता था, इस अपवाद से पहले कहीं भी दिखाई देने से पहले प्रक्रियात्मक कोड कैसा दिखता था।

लेकिन मैंने एक निर्माता को अपने निर्माता में अलग-अलग किया था जैसा कि प्रक्रियात्मक कोड पहले किया गया था। यह आदेश है जो उन्होंने WHERE क्लॉज में डाल दिया है! इसलिए मैंने इस भविष्यवाणी को चारों ओर स्थानांतरित करना शुरू कर दिया और जल्द ही पता चला कि वास्तव में भविष्यवाणियों के आदेश में बहुत कुछ कहना था। अगर मैंने यह सब अकेला भविष्यवाणी की थी, तो मेरी क्वेरी ने काम किया (लेकिन पाठ्यक्रम के गलत परिणाम-मैच को वापस कर दिया), अगर मैं उसे सिर्फ एक या दूसरी भविष्यवाणी करता हूं तो यह कभी-कभी काम करता है, दूसरी बार काम नहीं करता है। इसके अलावा, प्रक्रियात्मक कोड के पिछले क्रम की नकल करना या तो काम नहीं करता था। आखिरकार काम किया गया था कि इस डरावनी भविष्यवाणी को मेरे WHERE खंड की शुरुआत में, जैसा कि पहले अनुमानित जोड़ा गया था! तो फिर अगर मैंने खुद को स्पष्ट नहीं किया है, तो मेरे भविष्यवाणी का आदेश जहां WHERE विधि/खंड में जोड़ा गया था, यह अपवाद बना रहा था।

0

मुझे लगता है कि यह कई चीजों के कारण हो सकता है। मेरे मामले में यह मेरी क्वेरी में "आईडी आईडी" स्थिति थी और मैं तैयार किए गए सेट पर सेटस्ट्रिंग विधि का उपयोग कर स्ट्रिंग के रूप में डैश द्वारा अलग आईडी सेट कर रहा था।

यह सुनिश्चित करने के लिए कोई बेहतर तरीका नहीं है, लेकिन मैंने अभी अपने कथन में प्लेसहोल्डर जोड़ा और इसे अपने मूल्यों से बदल दिया।

0

किसी को भी इस अपवाद रहा है और स्काला बहु लाइन तार का उपयोग कर क्वेरी बनाने जा रहा है, तो:

ऐसा लगता है कि कुछ जेपीए ड्राइवरों को इस स्थिति में के साथ एक समस्या है। मुझे यकीन नहीं है कि लाइन स्केल का उपयोग लाइन ईएनडी के लिए क्या होता है, लेकिन जब आपके पास लाइन के अंत में एक पैरामीटर सही होता है, तो LINE END वर्ण पैरामीटर से जुड़ा हुआ प्रतीत होता है और इसलिए जब ड्राइवर क्वेरी को पार करता है, तो यह त्रुटि आती हैएक साधारण काम के आसपास सही अंत में परम के बाद एक खाली जगह छोड़ने के लिए है:

SELECT * FROM some_table a 
WHERE a.col = ?param 
AND a.col2 = ?param2 

तो, बस (तुम वहाँ एक लाइन ब्रेक अगर और param2,) परम के बाद एक रिक्त स्थान छोड़ना सुनिश्चित करें।

0

यदि आप प्राइमफ़ेस का उपयोग कर रहे हैं, तो आपको .xhtml फ़ाइल के अंदर डालना चाहिए ताकि यह सही ढंग से जावा पूर्णांक में परिवर्तित हो। उदाहरण के लिए:

<p:selectCheckboxMenu 
    id="frameSelect" 
    widgetVar="frameSelectBox" 
    filter="true" 
    filterMatchMode="contains" 
    label="#{messages['frame']}" 
    value="#{platform.frameBean.selectedFramesTypesList}" 
    converter="javax.faces.Integer"> 
    <f:selectItems 
     value="#{platform.frameBean.framesTypesList}" 
     var="area" 
     itemLabel="#{area}" 
     itemValue="#{area}" /> 
</p:selectCheckboxMenu> 
1

प्रतीत नहीं होता है जैसे आप एक जवाब मिल गया लेकिन इस समस्या को भी रेंगना कर सकते हैं अगर आप अपने जेपीए विधेय में अशक्त आईडी गुजर रहे हैं।

उदाहरण के लिए।

यदि मैंने एक सूची वापस पाने के लिए बिल्लियों पर एक प्रश्न किया है। जो 3 परिणाम देता है।

सूची बिल्लीसूची;

मैं तब बिल्लियों की सूची पर फिर से चलाता हूं और बिल्ली की एक फोरीगिन कुंजी स्टोर करता हूं शायद किसी अन्य सूची में टाइप करें।

List<Integer> leashTypeIds= new ArrayList<>(); 

for(Cats c : catList){ 
    leashTypeIds.add(c.getLeashTypeId); 
} 

jpaController().findLeashes(leashTypeIds); 

तो केटलिस्ट में बिल्लियों में से किसी एक अशक्त है leashTypeId जब आप अपने डीबी क्वेरी करने के लिए कोशिश यह इस त्रुटि फेंक देते हैं।

(बस महसूस किया कि मैं एक 5 साल पुराने धागे पर पोस्टिंग कर रहा हूँ, शायद किसी को यह उपयोगी मिल जाएगा)

संबंधित मुद्दे

 संबंधित मुद्दे