2016-07-19 7 views
0

i Hibernate verwenden, um zu meinem db verbindet und i konfigurieren meine Datenbank in Seite meiner DBConnector Klasse:Hibernate NoSuchMethodError für AddPackage Methode

public static SessionFactory connectingHibernate(){ 
    Properties database=new Properties(); 

    database.setProperty("hibernate.connection.driver_class",PROPERTY_NAME_DATABASE_DRIVER); 
    database.setProperty("hibernate.connection.username",USERNAME); 
    database.setProperty("hibernate.connection.password",PASSWORD); 
    database.setProperty("hibernate.connection.url",url); 
    database.setProperty("hibernate.dialect",DIALECT); 

    Configuration cfg=new Configuration() 
      .setProperties(database) 
      .addPackage("androidapi.model") 
      .addAnnotatedClass(User.class) 
      .addAnnotatedClass(Product.class) 
      .addAnnotatedClass(PriceProduct.class) 
      .addAnnotatedClass(CoinPrice.class) 
      .addAnnotatedClass(SellPage.class) 
      .addAnnotatedClass(Setting.class) 
      .addAnnotatedClass(Message.class); 



    StandardServiceRegistryBuilder ssrb=new StandardServiceRegistryBuilder() 
      .applySettings(cfg.getProperties()); 
    sessionFactory=cfg.buildSessionFactory(ssrb.build()); 
    return sessionFactory; 
} 

, wenn ich aus dem Inneren meines ide meine Anwendung ausführen mein Code funktioniert einwandfrei, aber nachdem ich eine WAR-Datei mit Maven gemacht habe, habe ich diese Ausnahme auf Methoden, die meine db benutzen! Wie kann ich das beheben?

Ausnahme:

"error": "Internal Server Error", 
    "exception": "java.lang.NoSuchMethodError", 
    "message": "org.hibernate.cfg.Configuration.addPackage(Ljava/lang/String;)Lorg/hibernate/cfg/Configuration;", 

nach removeing ​​diese Zeile:. addPackage("androidapi.model") ich diese Ausnahme bekam:

"exception": "java.lang.NoSuchMethodError", 
    "message": "org.hibernate.cfg.Configuration.addAnnotatedClass(Ljava/lang/Class;)Lorg/hibernate/cfg/Configuration;", 
    "path": "/myinsta/admin_api/mGetAllUser" 

meine pom.xml Hibernate Abhängigkeiten:

<dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.6</version> 
    </dependency> 

    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate</artifactId> 
     <version>LATEST</version> 
     <type>pom</type> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>LATEST</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-search</artifactId> 
     <version>LATEST</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>LATEST</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-commons-annotations</artifactId> 
     <version>LATEST</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>LATEST</version> 
    </dependency> 

gelöst! Lese Antwort und seine gut zu wissen, dass Sie kompatible Version von Hibernate verwenden sollten, die hier bei meaven finden können: Maven dependency

+0

Haben Sie wirklich brauchen diese 'AddPackage ("androidapi.model")'? –

+0

Ja, wenn ich diese Zeile entferne, kann sie meine db-Modellklassen wie User & ... nicht finden. @ V.ladynev –

+0

Benutzt du Anmerkungen zu 'User'? –

Antwort

1

Sie müssen diese Zeile nicht

addPackage("androidapi.model") 

Verfahren addPackage() kein Paket scannt. Es dient zum Lesen von "Metadaten auf Paketebene" (.package-info- Dateien).

Sieht aus wie, verwenden Sie Hibernate 5. Sie können nicht in den Ruhe 4 Konfigurationscode mit Hibernate 5

https://stackoverflow.com/a/32711654/3405171

Wenn Sie Pakete scannen

https://stackoverflow.com/a/35248061/3405171

wollen nutzen, verwenden eine gültige Hibernate-Version überprüfen Sie einfach diese Seite mit Hibernate Core Versionen:

https://mvnrepository.com/artifact/org.hibernate/hibernate-core

und fügen Sie es zu pom.xml hinzu (wenn Sie Maven verwenden). Zum Beispiel für Hibernate 5.2.1.Final (Es verwendet Java 8):

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-core</artifactId> 
    <version>5.2.1.Final</version> 
    </dependency> 

Eine Abhängigkeit von hibernate-core hübsch genug ist, weil alle anderen Bibliotheken werden von Maven als transitive Abhängigkeiten geladen werden. Um den Logger zu verwenden, müssen Sie jedoch eine zusätzliche Abhängigkeit hinzufügen.

Wenn Sie ein Archiv mit allen erforderlichen Gläser herunterladen möchten, können Sie die Hibernate Download-Seite überprüfen:

http://hibernate.org/orm/downloads/

+0

" Ausnahme ":" java.lang.NoSuchMethodError ", " Nachricht ":" org. hibernate.cfg.Configuration.addAnnotatedClass (Ljava/lang/Class;) Lorg/Ruhezustand/cfg/Configuration; ", " Pfad ":"/myinsta/admin_api/mGetAllUser " –

+0

nach dem Entfernen von addpack() –

+0

ok zur Frage hinzugefügt! –

3

Sie haben mehrere Versionen von Hibernate auf Ihrem Classpath (zum Zeitpunkt des Schreibens dieses Artikels dieser: höchstwahrscheinlich 3.6.0.beta2 und bei 5.2.1.Final)

Remove:

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate</artifactId> 
    <version>LATEST</version> 
    <type>pom</type> 
</dependency> 

Dies wird in einer älteren Version zu ziehen.

+0

Lustig, sieht so aus, 'Hibernate' ist eine Artefakt-ID einer alten Version von Hibernate :) –

Verwandte Themen