You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot启动失败:entityManagerFactory Bean创建失败原因排查

Spring Boot + Hibernate CRUD应用启动失败排查

问题场景

启动基于Spring Boot + Hibernate的简单CRUD应用时遭遇启动失败,核心报错片段如下:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.InstantiationException: Could not instantiate entity 'com.sij.demospringboot.entities.StudentEntity' due to: null
    ...
Caused by: java.lang.Error: Unresolved compilation problems: 
    javax.annotation.Generated cannot be resolved to a type
    javax.annotation.Generated cannot be resolved to a type

    at com.sij.demospringboot.entities.StudentEntity.<init>(StudentEntity.java:22) ~[classes/:na]
    ...

对应的StudentEntity代码:

@Entity
@Table(name = "students")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class StudentEntity  implements Serializable {
    
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    
    @NotEmpty(message="Name is mandatory")
    private String name;
    
    @Column(nullable = true, name = "email")
    private String email;

}

application.properties配置:

server.port = 8082

# JPA/Hibernate
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update

# H2 Database
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:dcbapp
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

根因分析

外层异常中的null只是模糊提示,真正导致启动失败的是编译阶段的类缺失错误:javax.annotation.Generated无法解析。

具体原因:

  • 你的Spring Boot版本是6.x(从依赖spring-beans-6.1.2可判断),该版本基于Jakarta EE 9+规范,所有原Java EE的javax.*包已迁移至jakarta.*。
  • @Data等Lombok注解生成代码时,默认会添加@Generated注解,但如果Lombok版本过低,它会生成旧的javax.annotation.Generated,而非Jakarta规范的jakarta.annotation.Generated,导致编译时找不到该类。

解决方案

方案1:升级Lombok版本

确保Lombok版本为1.18.26或更高(此版本开始支持Jakarta EE注解)。

Maven依赖更新:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version>
    <scope>provided</scope>
</dependency>

Gradle配置更新:

compileOnly 'org.projectlombok:lombok:1.18.30'
annotationProcessor 'org.projectlombok:lombok:1.18.30'

方案2:配置Lombok使用Jakarta注解

若暂时无法升级Lombok,可在项目根目录创建lombok.config文件,添加以下配置:

lombok.addLombokGeneratedAnnotation = true
lombok.jakarta.support = true

方案3:临时移除Serializable实现

若不需要序列化功能,可暂时移除implements Serializable和serialVersionUID,避免Lombok生成相关的@Generated注解(不推荐长期使用)。


内容的提问来源于stack exchange,提问作者Tech de Enigma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 02:45:27