用于addPackage方法的Hibernate NoSuchMethodError

时间:2016-07-19 06:43:43

标签: java hibernate maven configuration

我使用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文件后,我在使用我的db的方法上遇到了这个异常!我该如何解决这个问题?

异常:

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

已解决!阅读答案并了解您应该使用可在此处找到的兼容版本的hibernate: Maven dependency

2 个答案:

答案 0 :(得分:3)

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

卸下:

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

这是旧版本。

答案 1 :(得分:1)

您不需要此行

addPackage("androidapi.model")

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

看起来,你使用的是Hibernate 5.你不能在Hibernate 5中使用Hibernate 4配置代码

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加载为传递依赖。但是,要使用记录器,您需要添加其他依赖项。

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

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