Spring Boot JPA报No identifier specified for entity异常排查
错误原因
抛出AnnotationException: No identifier specified for entity的核心问题是注解使用位置错误,和QuestionnaireAnswer实体类本身的主键配置、数据库表主键设置无关。
你在Repository接口上错误添加了仅用于实体类的@Entity、@Table注解:
// 错误用法:这两个注解仅能标注在实体类上,不能放在Repository接口 @Entity @Table(name = "questionnaire_answer") public interface QuestionaireRepository extends CrudRepository<QuestionnaireAnswer, UUID> {
JPA启动时会扫描所有标注@Entity的类型并将其识别为数据库映射实体,当它识别到加了@Entity的QuestionaireRepository接口时,会在这个接口内查找标注@Id的主键字段,接口本身不存在对应字段配置,就会直接抛出未指定实体标识符的异常。
修复方案
- 删除Repository接口上的
@Entity、@Table注解。Spring Data JPA的Repository接口不需要这两个注解,只要位于组件扫描路径下就会被自动识别,需要显式标注的话只加@Repository即可。
修正后的Repository参考代码:import org.springframework.data.repository.CrudRepository; import java.util.UUID; public interface QuestionaireRepository extends CrudRepository<QuestionnaireAnswer, UUID> { // 自定义数据库操作方法写在此处 } - 核对实体类
@Id注解的导包:确认导入的是javax.persistence.Id(使用Javax版本JPA)或jakarta.persistence.Id(使用Jakarta EE版本JPA),不要导入其他依赖下的同名Id注解。你贴出的实体类代码中该导包是正确的,无需额外调整。 - 确认实体扫描路径覆盖
QuestionnaireAnswer所在包:Spring Boot项目只要实体类位于启动类所在包及子包下,就会被自动扫描识别,不需要额外配置。
可选优化
你当前数据库主键为varchar(36)类型,和实体类UUID类型可以正常适配,如果需要自动生成主键,可以在实体类id字段上添加@GeneratedValue注解指定UUID生成策略,不需要手动赋值主键。
内容的提问来源于stack exchange,提问作者FrancMo
相关产品推荐
相关产品推荐

