Spring Boot BeanCreationException求助:Unknown access type record异常
解决BeanCreationException: Unknown access type record问题
问题根源
这个错误是JPA(Hibernate)无法识别Java Record作为实体类导致的:
- 旧版本Hibernate(5.x及以下,对应Spring Boot 2.x)完全不支持Record作为实体;
- 即使是支持Record的Hibernate 6.x(Spring Boot 3.x),Record作为实体也有诸多限制(比如不可变性、无默认构造器等),不适合新手学习阶段使用。
修复步骤
1. 将Record实体改为标准JPA实体类
如果是跟随旧教程学习,直接把Record改成带@Entity注解的普通类,示例:
import jakarta.persistence.Entity; import jakarta.persistence.Id; @Entity public class User { @Id private Long id; private String username; private String email; // JPA必须的无参构造器 public User() {} // 自定义构造器 public User(Long id, String username, String email) { this.id = id; this.username = username; this.email = email; } // Getter和Setter方法(或用Lombok的@Data注解简化) public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
2. 检查Spring Boot版本(可选)
如果一定要用Java Record作为实体,需要:
- 升级Spring Boot到3.x及以上(内置Hibernate 6.x);
- 给Record添加
@Entity和@Id注解,但这种方式有较多限制,不推荐新手使用。
3. 验证依赖配置
检查pom.xml中Spring Boot Starter Data JPA的依赖,确保版本匹配:
<!-- Spring Boot 2.x版本(对应Hibernate 5.x) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- 若升级到Spring Boot 3.x,依赖无需修改,但Java版本需为17+ -->
额外提示
- JPA实体类必须提供无参构造器(Hibernate需要通过反射实例化实体);
- 实体类属性需提供Getter/Setter,或用Lombok的
@Data、@Getter+@Setter注解简化代码; - 确保
@Id注解正确标记主键字段。
内容的提问来源于stack exchange,提问作者marcom966
相关产品推荐
相关产品推荐

