JPA中@Embedded嵌入@Embeddable类时提示类型不允许报错的原因
触发「'Embedded' attribute type should not be 'Address'」报错的常见原因
- 注解导入包不匹配
这是最高发的触发场景:JPA 相关注解存在两套互不兼容的体系(旧版javax.persistence、3.0及以上版本jakarta.persistence),如果Address类上的@Embeddable和Order类字段上的@Embedded来自不同的注解体系,校验器无法识别类型的嵌入标记,就会判定Address不是合法的嵌入属性类型。 - IDE校验缓存未同步
如果你是先在Order类上写了带@Embedded的address字段,之后才给Address类补上@Embeddable注解,IDE的JPA元数据扫描缓存不会自动实时更新,会误将已经标记为可嵌入的Address判定为普通POJO,触发和实际代码逻辑无关的虚假报错。 - 实体扫描配置范围缺失
如果项目配置的@EntityScan、Persistence单元的扫描路径没有覆盖Address类所在的包范围,框架加载元数据时无法识别到Address类上的@Embeddable注解,只会将其视作普通Java类,自然无法匹配@Embedded的类型要求。 - 编译生成的class文件元数据异常
如果Address类上次编译时因为语法报错、依赖加载不全,生成的class文件没有正确写入@Embeddable的注解元数据,Order类引用时拿到的是缺少嵌入标记的旧版本类文件,就会触发校验报错。
内容的提问来源于stack exchange,提问作者OlSi
相关产品推荐
相关产品推荐

