【问题标题】:Hibernate NoSuchMethodError for addPackage methodaddPackage 方法的休眠 NoSuchMethodError
【发布时间】:2016-11-21 22:03:18
【问题描述】:

我使用 Hibernate 连接到我的数据库,并在我的 dbConnector 类中配置我的数据库:

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

当我从我的 ide 内部运行我的应用程序时,我的代码可以正常工作,但是在使用 maven 制作 war 文件后,我在使用我的数据库的方法上遇到了这个异常!我该如何解决这个问题?

例外:

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

删除此行后:.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 休眠依赖:

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

已解决! 阅读答案,很高兴知道您应该使用兼容版本的 hibernate,可以在 meaven 部分找到: Maven dependency

【问题讨论】:

  • 你真的需要这个addPackage("androidapi.model")吗?
  • 是的,如果我删除此行,它将找不到我的数据库模型类,如 User & ... @v.ladynev
  • 你在User上使用注解吗?
  • 旁注(与问题无关):通常你不想使用LATEST,因为它会使你的构建变得不确定。
  • @raphaëλ 你说得对!TnQ

标签: java hibernate maven configuration


【解决方案1】:

您的类路径上有多个版本的 hibernate(在撰写本文时:很可能是 3.6.0.beta25.2.1.Final

删除:

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

这是拉入旧版本。

【讨论】:

  • 有趣,看起来,hibernate 是旧版本 Hibernate 的工件 id :)
【解决方案2】:

你不需要这条线

addPackage("androidapi.model")

addPackage() 方法不扫描包。它用于读取“包级元数据”(.package-info- 文件)。

看起来,您使用的是 Hibernate 5。您不能将 Hibernate 4 配置代码与 Hibernate 5 一起使用

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

如果你想扫描包

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

要使用有效的 Hibernate 版本,只需使用 Hibernate 核心检查此页面 版本:

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 作为传递依赖加载。但是,要使用 logger,您需要添加额外的依赖项。

如果您想下载包含所有必需 jar 的存档,可以查看 Hibernate 下载页面:

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

【讨论】:

  • “异常”:“java.lang.NoSuchMethodError”,“消息”:“org.hibernate.cfg.Configuration.addAnnotatedClass(Ljava/lang/Class;)Lorg/hibernate/cfg/Configuration; ", "路径": "/myinsta/admin_api/mGetAllUser"
  • 删除 addpack() 后
  • 我删除了所有缓存的 jar 文件并重新下载
  • @mehdiakbarian 你需要修复你的pom.xml
  • 这就是重点!如何??当我使用我的 ide 运行和调试时,我的 pom.xml 工作正常,但是当我制作 war 文件时它不起作用 idk 如何修复它
猜你喜欢
  • 2017-08-13
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多