报错如下:
即:
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为表的信息