SpringBoot应用启动失败,遇OptimisticLockException类找不到异常
org.hibernate.OptimisticLockException类找不到的问题 从你提供的错误栈和pom.xml配置来看,启动失败的核心原因是运行时无法找到org.hibernate.OptimisticLockException类——这个类属于Hibernate核心依赖包,出现这个问题通常是因为Hibernate核心组件没有被正确引入项目,或是存在依赖冲突。
具体排查和解决步骤
1. 检查Hibernate核心依赖是否正常引入
Spring Boot的spring-boot-starter-data-jpa本应自动帮你引入hibernate-core依赖,但偶尔会因为依赖解析问题导致它缺失。你可以通过Maven命令查看项目的依赖树:
mvn dependency:tree
在输出结果中搜索org.hibernate:hibernate-core,如果找不到这个条目,说明依赖未被正确引入,需要手动添加:
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <!-- Spring Boot 1.5.9.RELEASE默认适配Hibernate 5.0.12.Final,无需手动指定版本 --> </dependency>
2. 清理并重新下载Maven依赖
有时候本地Maven仓库的依赖文件损坏、不完整,也会导致类找不到的问题。执行以下命令强制清理并更新所有依赖:
mvn clean install -U
-U参数会强制Maven更新远程仓库的元数据和快照依赖,确保所有依赖都完整下载到本地。
3. 排查并解决依赖冲突
如果依赖树中出现了多个版本的hibernate-core,说明存在依赖冲突(比如其他第三方依赖引入了旧版本的Hibernate)。此时需要找到冲突的依赖,并排除它自带的Hibernate核心包。
举个例子,如果some-third-party-dependency引入了冲突的Hibernate版本,你可以这样排除:
<dependency> <groupId>com.example</groupId> <artifactId>some-third-party-dependency</artifactId> <exclusions> <exclusion> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> </exclusion> </exclusions> </dependency>
4. 确认版本兼容性
你使用的Spring Boot版本是1.5.9.RELEASE,它默认适配的Hibernate版本是5.0.12.Final。如果手动指定了其他版本的Hibernate,可能会出现兼容性问题导致类找不到。建议尽量使用Spring Boot starter管理的依赖版本,避免手动指定版本号。
内容的提问来源于stack exchange,提问作者rajasekhar pippalla

