NoSuchMethodError in javax.persistence.Table.indexes () [Ljavax / दृढ़ता / सूचकांक


85

मेरे पास एक प्ले फ्रेमवर्क एप्लिकेशन है और मैं हाइबरनेट 4.2.5 का उपयोग कर रहा था। फ़ाइनल (जिसे मावेन निर्भरता प्रबंधक के माध्यम से पुनर्प्राप्त किया गया है)। मैंने हाइबरनेट 4.3.0 को अपग्रेड करने का निर्णय लिया। फ़ाइनल, मेरे आवेदन को सफलतापूर्वक पुन: जमा कर, और इसे चलाया।

मुझे नीचे अपवाद मिला है, और यह पता लगाने में सक्षम नहीं है कि क्यों। मैं वापस 4.2.5 पर आ गया और यह समस्या उत्पन्न नहीं हुई। मैंने तब 4.2.5 के बाद प्रत्येक अंतिम रिलीज के साथ हाइबरनेट को अपग्रेड करने की कोशिश की। यही है, मैं 4.2.5.Final से 4.2.6.Final, 4.2.7.Final, से 4.2.8.Final और फिर 4.3.9.inal तक चला गया। समस्या तब तक नहीं होती है जब तक कि मैं 4.3.0 पर नवीनीकृत नहीं करता। फ़ाइनल।

जावा संस्करण की जानकारी

java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

और अपवाद :

play.api.UnexpectedException: Unexpected exception[NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:152) ~[play_2.10.jar:2.2.1]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:112) ~[play_2.10.jar:2.2.1]
    at scala.Option.map(Option.scala:145) ~[scala-library.jar:na]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply(ApplicationProvider.scala:112) ~[play_2.10.jar:2.2.1]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply(ApplicationProvider.scala:110) ~[play_2.10.jar:2.2.1]
    at scala.util.Success.flatMap(Try.scala:200) ~[scala-library.jar:na]
Caused by: java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
    at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:936) ~[hibernate-core-4.3.0.Final.jar:4.3.0.Final]
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:781) ~[hibernate-core-4.3.0.Final.jar:4.3.0.Final]
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3762) ~[hibernate-core-4.3.0.Final.jar:4.3.0.Final]
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3716) ~[hibernate-core-4.3.0.Final.jar:4.3.0.Final]
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1410) ~[hibernate-core-4.3.0.Final.jar:4.3.0.Final]
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844) ~[hibernate-core-4.3.0.Final.jar:4.3.0.Final]

1
आप एक ऐसी विधि कह रहे हैं जो नए संस्करण में मौजूद नहीं है
ब्रायन रोच

जवाबों:


79

मैं उसी समस्या में भाग गया हूं। यहाँ सवाल यह है कि play-java-jpa विरूपण साक्ष्य (build.sbt फ़ाइल में javaJpa कुंजी) कल्पना के एक अलग संस्करण पर निर्भर करता है (version 2.0 -> "org.hibernate.javax.persistence" % "hibernate-jpa-2.0-api" % "1.0.1.Final")

जब आपने हाइबरनेट-एन्ट्रोमैनेजर 4.3 जोड़ा है तो यह नया प्रेशर (2.1) और एक अलग फैक्ट्री प्रोवाइडर के लिए लाया गया। मूल रूप से आप दोनों वर्ग जार को क्षणिक निर्भरता के रूप में समाप्त कर चुके हैं।

अपनी build.sbt फ़ाइल को इस तरह से संपादित करें और यह अस्थायी रूप से आपकी समस्या को ठीक कर देगा जब तक कि नया एपीआई निर्भरता के लिए jpa प्लगइन का नया संस्करण रिलीज़ न करें।

libraryDependencies ++= Seq(
javaJdbc,
javaJpa.exclude("org.hibernate.javax.persistence", "hibernate-jpa-2.0-api"),
"org.hibernate" % "hibernate-entitymanager" % "4.3.0.Final"
)

इसके लिए है play 2.2.x। पिछले संस्करणों में बिल्ड फ़ाइलों में कुछ अंतर थे।


1
बहुत बढ़िया, यह काम किया! धन्यवाद। भविष्य के संदर्भ के लिए, यहाँ सकर्मक निर्भरता को छोड़कर प्रलेखन के लिए एक लिंक दिया गया है: scala-sbt.org/0.12.2/docs/Detailed-Topics/…
musubi

4
धन्यवाद! मावेन उपयोगकर्ताओं के लिए: इसका मतलब है कि न ही <groupId>org.hibernate.java-persistence</groupId> <artifactId>jpa-api</artifactId> किसी भी अधिक का उपयोग करें
ओक

4
के लिए hibernate-jpa-2.0-apiहाइबरनेट 4.2.8.Finalसंस्करण काम है 4.3.0.Finalभी एक त्रुटि फेंक देते हैं।
हरमीत सिंह तारा

प्ले 2.2.3 libraryDependencies ++= Seq( javaJdbc, javaEbean, cache, javaJpa.exclude("org.hibernate.javax.persistence", "hibernate-jpa-2.0-api"), "org.hibernate" % "hibernate-core" % "4.3.0.Final", "org.hibernate" % "hibernate-entitymanager" % "4.3.0.Final", "com.typesafe" %% "play-plugins-mailer" % "2.2.0", "postgresql" % "postgresql" % "9.1-901-1.jdbc4", "com.google.guava" % "guava-base" % "r03", "org.apache.commons" % "commons-io" % "1.3.2" )पर अभी भी NoSuchMethodException फेंक रहा है NoSuchMethodError:javax.persistence.JoinTable.indexes()किसी को भी पता है कि कैसे हल करना है?
फ्रांसेस्कोएम

प्ले 2.3.4 संस्करण के साथ भी इसी मुद्दे का सामना कर रहा हूँ। यहाँ स्टैक ट्रेस प्ले है। $ 1 $ $ anonfun $ 1.apply (ApplicationProvider.scala: 170) ~ [play_2.11-2.3.4.jar: 2.3.4] play.core पर। anonfun $ 1.apply (ApplicationProvider.scala: 130) ~ [play_2.11-2.3.4.4.jar: 2.3.4] scala.Option.map (Option.scala: 145) ~ [scala-Library-2.20.1 पर। jar: na]
केतन खैरनार

71

हाइबरनेट 4.3 जेपीए 2.1 युक्ति (जावा ईई 7 का हिस्सा) को लागू करने वाला पहला संस्करण है। और यह इस प्रकार क्लासपाथ में जेपीए 2.1 पुस्तकालय की उम्मीद कर रहा है, जेपीए 2.0 पुस्तकालय नहीं। इसलिए आपको यह अपवाद मिलता है: Table.indexes () तालिका की एक नई विशेषता है, जिसे जेपीए 2.1 में पेश किया गया है


मैं उसी ट्रैक से नीचे जा रहा था लेकिन जिस कोड में त्रुटि होती है वह indexes()प्रकार के संदर्भ में कॉल कर रहा है org.hibernate.annotations.Table
सोतीरियो डेलिमनोलिस

1
आप शायद सही कोड नहीं देख रहे हैं। देखें github.com/hibernate/hibernate-orm/blob/4.3.0.Final/…
JB Nizet

1
@JBNizet JPA 2.1 केवल जावा EE 7 में उपलब्ध है और SE 7 में नहीं है? और मुझे अनुमान है कि जावा एसई 7 में जेपीए 2.0 उपलब्ध है?
मुसुबी

2
@JBNizet तो क्या उपाय है। क्या मैं जावा ईई को 7 में बदल सकता हूं या क्या मैं जेपीए 2.0 को जेपीए 2.1 में बदल सकता हूं ?? अगर मैं ऐसा करता हूं तो मैं त्रुटि देता हूं ..
शैलेंद्र मद्दा

1
<! - mvnrepository.com/artifact/javax.persistence/... -> <निर्भरता> <ग्रुप> javax.persistence </ ग्रुप> <artifactId> javax.persistence-api </ artifactId> <version> 2.2 </ संस्करण > </ निर्भरता>
तुला

15

आपके पास क्लासपैथ पर हाइबरनेट-जपा-एपी के 2 अलग-अलग संस्करण हैं। उस चलाने की जांच करने के लिए:

mvn dependency:tree >dep.txt

फिर सर्च करें कि क्या हाइबरनेट-जेपा-2.0-एपि और हाइबरनेट-जेपा-2.1-एपी हैं। और एक को बाहर करो।


14

मैं अपने हाइबरनेट JPA को 2.1 में अपडेट करता हूं और यह काम करता है।

<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.1-api</artifactId>
    <version>1.0.0.Final</version>
</dependency>

6

मैं जेपीए एपीआई फ़ाइल को प्रतिस्थापित करके बस समस्या को हल कर सकता हूं जो 'हाइबरनेट-जपा-2.1-एपीआई' के साथ jboss7 / मॉड्यूल / javax / दृढ़ता / एपीआई / मुख्य स्थित है। निर्देशिका में अद्यतन करने के साथ मॉड्यूल। xml।


4

त्रुटि: java.lang.NoSuchMethodError: javax.persistence.JoinTable.indexes () [Ljavax / persistence / Index;

मेरी समस्या हल करने वाली एकमात्र चीज़ pom.xml में निम्न निर्भरता को दूर कर रही थी: <dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.1-api</artifactId> <version>1.0.0.Final</version> </dependency>

और इसके लिए इसे प्रतिस्थापित करें:

<dependency>
  <groupId>javax.persistence</groupId>
  <artifactId>persistence-api</artifactId>
  <version>1.0.2</version>
</dependency>

आशा है कि यह किसी की मदद करता है।


0

मैं अपने वसंत बूट आवेदन में एक ही मुद्दा अनुभव किया है। lib फोल्डर से javax.persistance.jar फ़ाइल को हटाने के बाद। मुद्दा तय हो गया। pom.xml फ़ाइल में मैं केवल निर्भरता का पालन कर रहा हूं

  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>

0

मेरे पास एक ही मुद्दा था, मैंने एंटिटी क्लास के org.hibernate.annotations.Tableबजाय एनोटेशन का उपयोग करके इसे ठीक किया javax.persistence.Table

import javax.persistence.Entity;
import org.hibernate.annotations.Table;

@Entity
@Table(appliesTo = "my_table")
public class MyTable{
//and rest of the code

0

आपके वर्गपथ में कई JPA प्रदाता हैं। या कम से कम अपने अनुप्रयोग सर्वर में काम करता है फ़ोल्डर।

यदि आप यहां बताए गए कमांड का उपयोग करके निर्भरता के लिए मावेन चेक का उपयोग कर रहे हैं तो https://stackoverflow.com/a/47474708/3333338

फिर अवांछित निर्भरता को हटाकर / हटाकर ठीक करें।

यदि आपके पास अपने classpath में सिर्फ एक निर्भरता है, तो एप्लिकेशन सर्वर का क्लास लोडर मुद्दा हो सकता है।

JavaEE एप्लिकेशन सर्वर जैसे वेब्सफेयर, वाइल्डफ्लाई, टोमे आदि में जेपीए और अन्य ईई मानकों के अपने कार्यान्वयन हैं, क्लास लोडर इसे WAR / EAR फ़ाइल में आपके क्लासपाथ से चुनने के बजाय खुद के कार्यान्वयन को लोड कर सकता है।

इससे बचने के लिए, आप नीचे दिए गए चरणों को आज़मा सकते हैं।

  1. अनुप्रयोग सर्वर लाइब्रेरी पथ में आपत्तिजनक जार को हटाना। सावधानी के साथ आगे बढ़ें, क्योंकि यह अन्य होस्ट किए गए अनुप्रयोगों को तोड़ सकता है।

Tomee 1.7.5 Plume / Web में यह JPA 2.0 का उपयोग करके फ़ोल्डर eclipselink-2.4.2में बंडल हो जाएगा lib, लेकिन मुझे JPA 2.1 का उपयोग करना था org.hibernate:hibernate-core:5.1.17, इसलिए eclipselink जार को हटा दिया और सभी संबंधित / ट्रांसीवर निर्भरता को हाइबरनेक्स कोर से जोड़ा।

  1. एक साझा पुस्तकालय जोड़ें। और मैन्युअल रूप से एप्लिकेशन सर्वर के पथ में जार जोड़ें। Websphere के पास यह विकल्प है।

  2. वेब्स्फेयर में, क्लास लोडर के निष्पादन को बदला जा सकता है। इसलिए इसे अंतिम रूप से लोड करने के लिए एप्लिकेशन सर्वर का क्लाथपाथ बनाते हैं, अभिभावक अंतिम और आपका पथ लोड पहले होता है। इसका हल निकाल सकते हैं।

पहले बिंदु के साथ आगे बढ़ने से पहले देखें कि क्या आपके पर्यवेक्षक के पास उपरोक्त विशेषताएं हैं।

इब वेब्स्फेयर संदर्भ:

https://www.ibm.com/support/knowledgecenter/SSEQTP_9.0.5/com.ibm.websphere.base.doc/ae/trun_classload_server.html

https://www.ibm.com/support/pages/how-create-shared-library-and-associate-it-application-server-or-enterprise-application-websphere-application-server

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.