休眠错误–初始SessionFactory创建失败。java.lang.NoClassDefFoundError:com / mchange / v2 / c3p0 / DataSources...

本文解决了一个常见的Hibernate错误,即由于缺少C3P0依赖库导致的InitialSessionFactory创建失败。提供了两种解决方案,一是直接下载C3P0库,二是通过Maven添加依赖。并附上了Maven坐标。

Hibernate的“ C3P0”连接池错误,这是由缺少依赖库C3P0引起的。


Initial SessionFactory creation failed.java.lang.NoClassDefFoundError: com/mchange/v2/c3p0/DataSources
Exception in thread "main" java.lang.ExceptionInInitializerError
	at com.mkyong.persistence.HibernateUtil.buildSessionFactory(HibernateUtil.java:19)
	at com.mkyong.persistence.HibernateUtil.<clinit>(HibernateUtil.java:8)
	at com.mkyong.common.App.main(App.java:11)
Caused by: java.lang.NoClassDefFoundError: com/mchange/v2/c3p0/DataSources
	at org.hibernate.connection.C3P0ConnectionProvider.configure(C3P0ConnectionProvider.java:154)
	at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124)
	at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:56)
	at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:410)
	at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62)
	at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)
	at com.mkyong.persistence.HibernateUtil.buildSessionFactory(HibernateUtil.java:13)
	... 2 more
Caused by: java.lang.ClassNotFoundException: com.mchange.v2.c3p0.DataSources
	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
	... 10 more

您可以在此处下载该库– http://www.mchange.com/projects/c3p0/

要么

使用Maven的坐标


        <dependency>
		<groupId>c3p0</groupId>
		<artifactId>c3p0</artifactId>
		<version>0.9.1.2</version>
	</dependency>

跟进


如何在Hibernate中配置C3P0连接池

From: https://mkyong.com/hibernate/hibernate-errorinitial-sessionfactory-creation-failed-java-lang-noclassdeffounderror-commchangev2c3p0datasources/

### 关于 `java.lang.NoClassDefFoundError` 的解决方案 当 Java 应用程序抛出 `java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration` 错误时,通常表明应用程序在运行时无法找到 Hibernate 配置类所需的依赖项。以下是可能的原因及其对应的解决方法: #### 1. **缺少必要的 Maven 依赖** 如果项目的构建工具是 Maven,则需要确保已正确引入 Hibernate 和其关联库的相关依赖。对于 Hibernate Core,可以添加以下依赖到 `pom.xml` 文件中[^2]: ```xml <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.x.x.Final</version> <!-- 替换为实际使用的版本 --> </dependency> ``` 此外,还需要确认其他相关依赖是否存在冲突或缺失,例如数据库驱动、JPA API 或者 Jackson 数据绑定库。 #### 2. **依赖范围配置错误** 有时开发者可能会将某些依赖的 `<scope>` 设置为了 `provided` 或 `test`,这可能导致这些依赖未被打包进最终的应用程序中。因此,在生产环境中会出现找不到类的情况。建议检查并调整如下部分的配置: ```xml <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.x.x.Final</version> <scope>compile</scope> <!-- 确保此值不是 provided/test --> </dependency> ``` #### 3. **模块化环境下的兼容性问题 (如 JDK 9+)** 如果是基于较新的 JDK 版本开发(比如 JDK 9 及以上),则需要注意由于 JPMS(Java Platform Module System)带来的影响。一些旧版框架可能并未完全适配新特性,从而引发类似 `NoClassDefFoundError` 的异常。针对这种情况,可以通过显式指定 JVM 参数来加载所需资源,或者升级至支持最新标准的组件版本。 例如,尝试通过命令行参数启用反射访问权限: ```bash --add-opens java.base/java.lang=ALL-UNNAMED ``` #### 4. **Spring Boot 中集成 Hibernate 的注意事项** 假如当前项目是一个 Spring Boot 工程,并且集成了 Hibernate ORM 功能,那么除了上述常规操作外,还需特别留意两者之间的版本匹配关系。因为不同版本之间可能存在接口变更甚至废弃的现象,进而导致此类错误发生[^3]。 推荐做法是从官方文档获取最新的组合表单作为参考依据;同时也可以借助插件自动管理复杂的依赖树结构,减少人为失误概率。 --- ### 示例代码片段展示如何初始SessionFactory 对象 下面给出一段简单的演示代码用于创建 Hibernate 的SessionFactory实例: ```java import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; public class HibernateUtil { private static final SessionFactory sessionFactory = buildSessionFactory(); public static SessionFactory getSessionFactory() { return sessionFactory; } private static SessionFactory buildSessionFactory() { try { Configuration configuration = new Configuration().configure(); // 加载 hibernate.cfg.xml 文件中的定义 StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder() .applySettings(configuration.getProperties()); return configuration.buildSessionFactory(serviceRegistryBuilder.build()); } catch (Throwable ex) { throw new ExceptionInInitializerError(ex); } } } ``` 注意:这段代码假定存在名为 `hibernate.cfg.xml` 的全局配置文件位于classpath根目录下。 --- ### 总结 综上所述,要彻底消除 `java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration` 这一类型的错误,需从以下几个方面入手排查原因并采取相应措施加以修正: - 完善Maven工程内的POM描述符; - 调整合适的编译器选项以及目标平台设定; - 更新第三方库直至满足相互间的协作需求为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值