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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:18:16