You need to enable JavaScript to run this app. Spring微服务六边形架构下HQL查询H2报ActivityEntity未映射问题
优惠活动
大模型
产品
解决方案
定价
更多

Spring微服务六边形架构下HQL查询H2报ActivityEntity未映射问题

问题修复方案

核心原因1:HQL查询实体名与声明不匹配

你在ActivityEntity类的@Entity注解中显式设置了name = "N_ACTIVITY",该属性的作用就是指定HQL/JPQL查询时使用的实体识别名称,你当前HQL语句中使用ActivityEntity作为查询对象,自然无法匹配到映射关系。

两种修复方案选其一即可:

  • 方案1:直接修改HQL语句,使用你声明的实体名:
Query query = entityManager.createQuery("SELECT a FROM N_ACTIVITY a");
  • 方案2:调整实体注解配置,区分数表名和实体名:
@Data
@EqualsAndHashCode(callSuper = true) // 继承父类时必须加,否则父类属性不会参与equals、hashCode计算
@ToString(callSuper = true)
@Entity // 不指定name属性时,实体名默认就是类名ActivityEntity
@Table(name = "N_ACTIVITY") // 用@Table注解单独指定数据库表名
public class ActivityEntity extends NomenclatureEntity {
}

核心原因2:Repository配置不规范

你的NomenclatureSpringDataRepository继承CrudRepository时,泛型指定的是NomenclatureEntity,但该类标注了@MappedSuperclass,仅作为实体公共属性的父类,本身不属于可被JPA管理的实体类,会导致相关子类的映射识别异常。

修复方案:

为每个实际的业务实体单独创建对应的Repository,比如ActivityEntity对应的Repository:

@Repository
public interface ActivitySpringDataRepository extends CrudRepository<ActivityEntity, Long> {
}

可选补充配置

如果上述修复完成后仍有映射错误,可在启动类上显式指定实体扫描路径,避免多模块架构下扫描不到实体的问题:

@SpringBootApplication(exclude={SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class})
@Import(value = MyApplicationConfig.class)
@EntityScan(basePackages = "com.package.company.infrastructure.repository.jpa.entity") // 显式指定实体类所在包路径
public class MyApplication {
    // 原有代码保持不变
}

内容的提问来源于stack exchange,提问作者Ousmane MBINTE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 19:42:01