mysql在一个简单的maven hibernate项目中遇到错误“java.lang.NoClassDefFoundError:org/hibernate/cfg/Mappings”
我正在使用maven、hibernate和mysql进行一个项目。这是我的pom。xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.heroku.realstate</groupId>
<artifactId>realstate-database</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>ejb3-persistence</artifactId>
<version>1.0.2.GA</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-tools</artifactId>
<version>4.3.2.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.5.6-Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-commons-annotations</artifactId>
<version>3.2.0.Final</version>
</dependency>
</dependencies>
</project>
这是我的资源/休眠。cfg。xml:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/$DATABASE_NAME
</property>
<property name="hibernate.connection.password">
$PASSWORD
</property>
<property name="hibernate.connection.username">
@USERNAME
</property>
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="show_sql">
true
</property>
<property name="hbm2ddl.auto">
create
</property>
<mapping class="com.heroku.realstate.database.user.UserEntity"/>
<mapping class="com.heroku.realstate.database.user.ClientEntity"/>
<mapping class="com.heroku.realstate.database.user.BotEntity"/>
<mapping class="com.heroku.realstate.database.sms.SmsEntity"/>
</session-factory>
</hibernate-configuration>
我已经安装了mysql并创建了一个名为$database_NAME的数据库,但我还没有在数据库中创建任何表(因为我不擅长sql,我希望hibernate能为像我这样的人做到这一点!)。这就是我使用hibernate的方式:
class HibernateUtils {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
// Create the SessionFactory from hibernate.cfg.xml
return new AnnotationConfiguration().configure(new File("hibernate.cfg.xml")).buildSessionFactory();
}
static SessionFactory getSessionFactory() {
return sessionFactory;
}
static void shutdown() {
// Close caches and connection pools
getSessionFactory().close();
}
我用maven构建了这个项目,它成功地构建了。但当我运行应用程序时,JVM给了我一个错误:java。lang.NoClassDefFoundError:org/hibernate/cfg/Mappings在这一行:
return new AnnotationConfiguration().configure(new File("hibernate.cgf.xml")).buildSessionFactory();
有什么问题吗?我该怎么修?谢谢
# 1 楼答案
如果您正在使用版本3以上的
Hibernate
像构建4或5,只需使用Configuration
而不是AnnotationConfiguration
类,因为AnnotationConfiguration
在版本3之后被删除让我们来看一个快照示例,其中包含11个依赖项和配置,以使用基于注释的映射配置
配置文件如下:
学生POJO班是:
最后,主要课程是:
# 2 楼答案
图书馆的问题。你可以使用Hibernate 5。所以在
pom.xml
中不需要这个Hibernate 5使用
hibernate-commons-annotations-5.0.1.Final.jar
,您不需要指定它。因为,它是一个可传递的依赖项你也不需要它,因为你不使用
JPA
Hibernate 4和Hibernate 5中没有
AnnotationConfiguration
。这是形式冬眠3配置Hibernate 5