tk.mybatis.mapper.MapperException: 无法获取实体类com.xxx.xxx.entity.BusinessSupervisionData对应的表名!(Clear EntityHelper entityTableMap cache)

发布时间 2023-05-29 15:02:40作者: 周文豪

报错如下:

即:

Exception in thread "Thread-47" tk.mybatis.mapper.MapperException: 无法获取实体类com.xxxxxxxx.xxx.entity.BusinessSupervisionData对应的表名!
    at tk.mybatis.mapper.mapperhelper.EntityHelper.getEntityTable(EntityHelper.java:69)
    at tk.mybatis.mapper.entity.Example.<init>(Example.java:103)
    at tk.mybatis.mapper.entity.Example.<init>(Example.java:88)
    at tk.mybatis.mapper.entity.Example.<init>(Example.java:78)
    at com.jawasoft.pts.service.SupervisionMonitorService.process(SupervisionMonitorService.java:33)
    at com.jawasoft.pts.job.DynamicJob.runWithMethod(DynamicJob.java:95)
    at com.jawasoft.pts.web.JobController$1.run(JobController.java:120)

报错的位置:

       BusinessSupervisionData bsd = new BusinessSupervisionData();
        Example em = new Example(BusinessSupervisionData.class);
        em.createCriteria()
                .andEqualTo("delFlag", 0)
                .andNotEqualTo("status", BusinessSupervisionData.TypeStatus.COMPLETED.getValue());

代码执行到上面红色字体处报错。

查看EntityHelper类的getEntityTable方法

发现eitityTable为null,并且entityTableMap为空

但是发现启动项目的时候,EntityHelper的initEntityNameMap方法中entityTableMap不为空,如下所示:

应该是启动的时候entityTableMap值不为空,后来因为某种原因将entityTableMap清空了。

查看启动日志,发现clear EntityHelper entityTableMap cache,即清空entityTableMap的缓存。

网上搜索Clear EntityHelper entityTableMap cache,说是devtools热部署导致的,遂在配置文件中加如如下配置:

spring:
  devtools:
    restart:
      enabled: false

问题解决。

注意:注释掉devtools依赖并不能解决问题

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

entityTableMap中存储的是实体类entity与表table的对应关系,key为实体类,value为表的信息