我使用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
答案 0 :(得分:3)
你的类路径上有多个版本的hibernate(在撰写本文时:最有可能3.6.0.beta2
和5.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下载页面: