2016-07-19 4 views
0

я использую Hibernate для подключения к моей БД, и я настроить свою базу данных в сторону моего dbConnector класса:Hibernate NoSuchMethodError для метода AddPackage

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; 
} 

, когда я запускаю мое приложение внутри моего язя мой код работает правильно, но после создания файла войны с maven я получил это исключение из методов, которые используют мой db! Как я могу это исправить?

исключение:

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

после removeing ​​этой строки:. addPackage("androidapi.model") я получил это исключение:

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

мои pom.xml Hibernate зависимостей:

<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> 

решена! чтение ответа и его хорошо знать, что вы должны использовать совместимую версию спящего режима, который может найти здесь meaven части: Maven dependency

+0

ли вам действительно нужно это 'AddPackage («androidapi.model»)'? –

+0

да, если я удалю эту строку, он не сможет найти мои классы моделей db, такие как User & ... @ v.ladynev –

+0

Используете ли вы аннотации на 'User'? –

ответ

1

Вам не нужна эта линия

addPackage("androidapi.model") 

Метод addPackage() не сканирует пакет. Он предназначен для чтения «метаданных на уровне пакета» (.package-info- файлов).

Похоже, вы используете Hibernate 5. Вы не можете использовать Hibernate код 4 конфигурации с Hibernate 5

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

Если вы хотите сканировать пакеты

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

Чтобы использовать действительная версия спящего режима, просто проверьте эту страницу с помощью гибернатного ядра версии:

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

и добавьте его в pom.xml (если вы используете Maven). Например, для Hibernate 5.2.1.Final (Он использует Java 8):

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

Зависимости от hibernate-core достаточно хорошенькие, из-за все другие библиотеки будут загружены по Maven в качестве переходных зависимостей. Однако для использования регистратора вам необходимо добавить дополнительную зависимость.

Если вы хотите скачать архив со всеми необходимыми баночки, вы можете проверить Hibernate страницу загрузки:

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

+0

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

+0

после удаления addpack() –

+0

ok добавил к вопросу! –

3

У вас есть несколько версий спящего режима на вашем пути к классам (на момент написания этой статьи этого: скорее всего, 3.6.0.beta2 и в 5.2.1.Final)

Снимите:

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

Это тянет в старой версии.

+0

Забавный, похоже, 'hibernate' является идентификатором артефакта старой версии Hibernate :) –

Смежные вопросы